首頁 > php教程 > php手册 > 主體

記一次nginx部署yii2專案時502 bad gatewary錯誤的檢驗

WBOY
發布: 2016-12-05 13:26:27
原創
1981 人瀏覽過

週六閒來無事,就試著安裝和部署下yii2,安裝過程沒什麼問題,但部署到nginx上時遇到了502 bad gatewary問題,折騰了半天才搞定。這個問題是我以前在部署yii2時沒有遇到過的,因此記在這裡以備忘。

1,安裝與部署環境

作業系統:macOS,php版本:5.6,nginx版本:1.10.1,yii2版本:2.0。

2,yii2的安裝

yii2的安裝很簡單,參考官網的手冊即可。我這裡安裝的是yii2-app-advanced(Yii 2 Advanced Project Template),項目地址在github上,按照README中的安裝說明一步一步來就行,這個就不多說了。

3,yii2在nginx上的部署

其實yii2-app-advanced專案README中對於如何部署在nginx上已經說的很清楚了,按照步驟來應該不會有什麼問題。但是我部署時偷了個懶,直接把README中nginx的部署參數拿來用了,結果才導致了502 bad gateway的錯誤。

HTTP狀態碼中5打頭的回應代碼都是因為伺服器端引起的,所以看下nginx的日誌:

error log:

看到upstream: "fastcgi: //127.0.0.1:9090"這裡,連接埠好像不對,於是查看下虛擬主機的設定:

 再看下php-fpm的配置:

果然,是nginx虛擬主機指定的FastCGI伺服器監聽埠錯了,這樣就會導致nginx沒有得到FastCGI伺服器的回應。所以瀏覽器發出請求時,nginx給瀏覽器回傳一個502的狀態碼,告訴瀏覽器上游的FastCGI伺服器沒有回應。

4,解決

在nginx的虛擬主機中,把fastcgi_pass指定的連接埠修改正確,這個錯誤就解決了。

5,總結

(1)HTTP狀態碼5打頭的錯誤是由伺服器端引起的,502 bad gateway則是由於作為網關或代理工作的伺服器(web伺服器)嘗試執行請求時,從上游伺服器(fastcgi伺服器)接收到無效的響應。

(2)fastcgi_pass是ngx_http_fastcgi_module模組的一個設定指令,它指定了fastcgi伺服器的位址,nginx文件中對它的描述如下:

<span style="color: #008080;"> 1</span> <span style="color: #000000;">Syntax:    fastcgi_pass address;
</span><span style="color: #008080;"> 2</span> <span style="color: #0000ff;">Default</span><span style="color: #000000;">:    —
</span><span style="color: #008080;"> 3</span> Context:    location, <span style="color: #0000ff;">if</span> <span style="color: #0000ff;">in</span><span style="color: #000000;"> location
</span><span style="color: #008080;"> 4</span> 
<span style="color: #008080;"> 5</span> <span style="color: #000000;">Sets the address of a FastCGI server. The address can be specified as a domain name or IP address, and a port:
</span><span style="color: #008080;"> 6</span> fastcgi_pass localhost:9000<span style="color: #000000;">;
</span><span style="color: #008080;"> 7</span> 
<span style="color: #008080;"> 8</span> or as a UNIX-<span style="color: #000000;">domain socket path:
</span><span style="color: #008080;"> 9</span> fastcgi_pass unix:/tmp/<span style="color: #000000;">fastcgi.socket;
</span><span style="color: #008080;">10</span> 
<span style="color: #008080;">11</span> <span style="color: #0000ff;">If</span> a domain name resolves to several addresses, all of them will be used <span style="color: #0000ff;">in</span> a round-robin fashion. <span style="color: #0000ff;">In</span> addition, an address can be specified as a server group.
登入後複製

 

參考:

HTTP狀態碼

fastcgi_pass

Syntax: <strong>fastcgi_pass</strong> <code><em>address</em>;
Default:
Context: locationif in location
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門推薦
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板