502 - Bad Gateway
官方解釋:作為網(wǎng)關(guān)或者代理工作的服務器嘗試執(zhí)行請求時睛驳,從上游服務器接收到無效的響應碑韵。
- 那么什么時候會出現(xiàn)上面的情況呢昵济?
- php-fpm沒有啟動,nginx無法將請求交給php-fpm
- php-fpm運行腳本超時壤躲,php-fpm終止了腳本的執(zhí)行和執(zhí)行腳本的Worker進程,nginx發(fā)現(xiàn)自己與php-fpm的連接斷開
nginx和php-fpm 報告502的通信過程
nginx 在這里充當?shù)氖欠聪虼矸掌鞯慕巧溉迹前?http 協(xié)議請求轉(zhuǎn)成 fastcgi 協(xié)議的請求,通過 fastcgi_pass 指令傳遞給 php-fpm 進程凌唬,當 php-fpm 進程響應的內(nèi)容是 nginx 無法理解的響應并齐,就會返回 502 bad gateway。502的問題如何解決
- 檢查php-fpm是否啟動
- 在 php.ini和 php-fpm.conf中分別有這樣兩個配置項:max_execution_time和 request_terminate_timeout客税。
- 這兩項都是用來配置一個 PHP 腳本的最大執(zhí)行時間的况褪。當超過這個時間時,PHP-FPM不只會終止腳本的執(zhí)行更耻,還會終止執(zhí)行腳本的Worker進程测垛。所以Nginx會發(fā)現(xiàn)與自己通信的連接斷掉了,就會返回給客戶端502錯誤秧均。
- 只需將這兩項的值調(diào)大一些就可以讓PHP腳本不會因為執(zhí)行時間長而被終止了食侮。request_terminate_timeout 可以覆蓋 max_execution_time,所以如果不想改全局的php.ini目胡,那只改PHP-FPM的配置就可以了锯七。
503 - Service Unavailable
服務器目前無法使用(由于超載或停機維護)。通常誉己,這只是暫時狀態(tài)眉尸。(服務不可用)。一個 http 請求占用一個 php-fpm 進程,瞬時請求量過大時噪猾,沒有足夠的 php-fpm 進程去處理請求霉祸,就會返回 503 service unavailable。
或者袱蜡,nginx 配置了頻率限制丝蹭,而 client 端又超過了配置的限制后就會收到 503 的響應。
504 Gateway Time-out
- 504錯誤的產(chǎn)生情況
504 即 nginx 超過了自己設(shè)置的超時時間戒劫,不等待 php-fpm 的返回結(jié)果半夷,nginx 的 fastcgi 模塊有一個 fastcgi_read_timeout 配置,它表示從 FastCGI server 獲取數(shù)據(jù)的超時時間迅细。如果超過這個配置巫橄,直接給客戶端返回 504 錯誤。但是此時 php-fpm 依然還在處理請求(在沒有超出自己的超時時間的情況下)
網(wǎng)關(guān)超時茵典,客戶端所發(fā)出的請求沒有到達網(wǎng)關(guān),在限定時間內(nèi)沒有得到php-fpm湘换,或者完成php-fpm的傳輸數(shù)據(jù)的工作而超時 。比方說:即nginx的worker去php-fpm進程池去處理统阿,但是沒有fpm進程可以使用了彩倚,等啊等,還是沒有扶平,返回504帆离。
- 解決辦法
*可以將nginx配置中的fastcgi_read_timeout 選項超時時間調(diào)大