部署yii項目時出現(xiàn)502錯誤怎么辦?
記一次nginx部署yii2項目時502 bad gateway錯誤的排查
周六閑來無事,就試著安裝和部署下yii2,安裝過程沒什么問題,但部署到nginx上時遇到了502 bad gatewary問題,折騰了半天才搞定。這個問題是我以前在部署yii2時沒有遇到過的,因此記在這里以備忘。
相關(guān)文章教程推薦:yii教程
1,安裝和部署環(huán)境
操作系統(tǒng):macOS,php版本:5.6,nginx版本:1.10.1,yii2版本:2.0。
2,yii2的安裝
yii2的安裝很簡單,參考官網(wǎng)的手冊即可。我這里安裝的是yii2-app-advanced(Yii 2 Advanced Project Template),項目地址在github上,按照README中的安裝說明一步一步來就行,這個就不多說了。
3,yii2在nginx上的部署
其實(shí)yii2-app-advanced項目README中對于如何部署在nginx上已經(jīng)說的很清楚了,按照步驟來應(yīng)該不會有什么問題。但是我部署時偷了個懶,直接把README中nginx的部署參數(shù)拿來用了,結(jié)果才導(dǎo)致了502 bad gateway的錯誤。
HTTP狀態(tài)碼中5打頭的響應(yīng)代碼都是由于服務(wù)器端引起的,所以看下nginx的日志:
error log:
看到upstream: "fastcgi: //127.0.0.1:9090"這里,端口好像不對,于是查看下虛擬主機(jī)的配置:
再看下php-fpm的配置:
果然,是nginx虛擬主機(jī)指定的FastCGI服務(wù)器監(jiān)聽端口錯了,這樣就會導(dǎo)致nginx沒有得到FastCGI服務(wù)器的響應(yīng)。所以瀏覽器發(fā)出請求時,nginx給瀏覽器返回一個502的狀態(tài)碼,告訴瀏覽器上游的FastCGI服務(wù)器沒有響應(yīng)。
4,解決
在nginx的虛擬主機(jī)中,把fastcgi_pass指定的端口修改正確,這個錯誤就解決了。
5,總結(jié)
(1)HTTP狀態(tài)碼5打頭的錯誤是由服務(wù)器端引起的,502 bad gateway則是由于作為網(wǎng)關(guān)或者代理工作的服務(wù)器(web服務(wù)器)嘗試執(zhí)行請求時,從上游服務(wù)器(fastcgi服務(wù)器)接收到無效的響應(yīng)。
(2)fastcgi_pass是ngx_http_fastcgi_module模塊的一個配置指令,它指定了fastcgi服務(wù)器的地址,nginx文檔中對于它的描述如下:
Syntax: fastcgi_pass address; Default: — Context: location, if in location Sets the address of a FastCGI server. The address can be specified as a domain name or IP address, and a port: fastcgi_pass localhost:9000; or as a UNIX-domain socket path: fastcgi_pass unix:/tmp/fastcgi.socket; If a domain name resolves to several addresses, all of them will be used in a round-robin fashion. In addition, an address can be specified as a server group.