502 - Bad Gateway
官方解釋:作為網(wǎng)關(guān)或者代理工作的服務(wù)器嘗試執(zhí)行請(qǐng)求時(shí),從上游服務(wù)器接收到無效的響應(yīng)。
- 那么什么時(shí)候會(huì)出現(xiàn)上面的情況呢?
- php-fpm沒有啟動(dòng),nginx無法將請(qǐng)求交給php-fpm
- php-fpm運(yùn)行腳本超時(shí),php-fpm終止了腳本的執(zhí)行和執(zhí)行腳本的Worker進(jìn)程,nginx發(fā)現(xiàn)自己與php-fpm的連接斷開
nginx和php-fpm 報(bào)告502的通信過程
nginx 在這里充當(dāng)?shù)氖欠聪虼矸?wù)器的角色,是把 http 協(xié)議請(qǐng)求轉(zhuǎn)成 fastcgi 協(xié)議的請(qǐng)求,通過 fastcgi_pass 指令傳遞給 php-fpm 進(jìn)程,當(dāng) php-fpm 進(jìn)程響應(yīng)的內(nèi)容是 nginx 無法理解的響應(yīng),就會(huì)返回 502 bad gateway。502的問題如何解決
- 檢查php-fpm是否啟動(dòng)
- 在 php.ini和 php-fpm.conf中分別有這樣兩個(gè)配置項(xiàng):max_execution_time和 request_terminate_timeout。
- 這兩項(xiàng)都是用來配置一個(gè) PHP 腳本的最大執(zhí)行時(shí)間的。當(dāng)超過這個(gè)時(shí)間時(shí),PHP-FPM不只會(huì)終止腳本的執(zhí)行,還會(huì)終止執(zhí)行腳本的Worker進(jìn)程。所以Nginx會(huì)發(fā)現(xiàn)與自己通信的連接斷掉了,就會(huì)返回給客戶端502錯(cuò)誤。
- 只需將這兩項(xiàng)的值調(diào)大一些就可以讓PHP腳本不會(huì)因?yàn)閳?zhí)行時(shí)間長(zhǎng)而被終止了。request_terminate_timeout 可以覆蓋 max_execution_time,所以如果不想改全局的php.ini,那只改PHP-FPM的配置就可以了。
503 - Service Unavailable
服務(wù)器目前無法使用(由于超載或停機(jī)維護(hù))。通常,這只是暫時(shí)狀態(tài)。(服務(wù)不可用)。一個(gè) http 請(qǐng)求占用一個(gè) php-fpm 進(jìn)程,瞬時(shí)請(qǐng)求量過大時(shí),沒有足夠的 php-fpm 進(jìn)程去處理請(qǐng)求,就會(huì)返回 503 service unavailable。
或者,nginx 配置了頻率限制,而 client 端又超過了配置的限制后就會(huì)收到 503 的響應(yīng)。
504 Gateway Time-out
- 504錯(cuò)誤的產(chǎn)生情況
504 即 nginx 超過了自己設(shè)置的超時(shí)時(shí)間,不等待 php-fpm 的返回結(jié)果,nginx 的 fastcgi 模塊有一個(gè) fastcgi_read_timeout 配置,它表示從 FastCGI server 獲取數(shù)據(jù)的超時(shí)時(shí)間。如果超過這個(gè)配置,直接給客戶端返回 504 錯(cuò)誤。但是此時(shí) php-fpm 依然還在處理請(qǐng)求(在沒有超出自己的超時(shí)時(shí)間的情況下)
網(wǎng)關(guān)超時(shí),客戶端所發(fā)出的請(qǐng)求沒有到達(dá)網(wǎng)關(guān),在限定時(shí)間內(nèi)沒有得到php-fpm,或者完成php-fpm的傳輸數(shù)據(jù)的工作而超時(shí) 。比方說:即nginx的worker去php-fpm進(jìn)程池去處理,但是沒有fpm進(jìn)程可以使用了,等啊等,還是沒有,返回504。
- 解決辦法
*可以將nginx配置中的fastcgi_read_timeout 選項(xiàng)超時(shí)時(shí)間調(diào)大