問題原因分析:502 bade gateway 一般都是upstream出錯,對於PHP,造成502的原因常見的就是腳本執行超過timeout設置時間,或者timeout設置過大,導致PHP進程長時間不能釋放。
控制PHP腳本執行時間的配置有兩種:
- php.ini文件中max_execution_time(全局配置)
- php-fpm.conf中request_terminate_timeout
如果這兩個配置都有設置,那么系統只會執行php-fpm.conf中的設置(優先級php-fpm.conf>php.ini)
下面讓服務器報出502的狀態碼:
- 配置php-fpm.conf中的request_terminate_timeout(該項真正的位置是在www.conf中)為3s ,配置完成后記得重啟php-fpm進程(centos7下重啟:systemctl restart php-fpm)


- 在項目根目錄下寫一個test.php 測試腳本代碼如下:
sleep(10);
echo '123';
- 瀏覽器訪問http://www.flyeagle.club/test.php 結果如下:
- 查看谷歌瀏覽器的調試工具顯示:

解決方案:
1.適當增大php腳本執行時間,通過修改php.ini或php-fpm.conf來配置
2.從根本原因出發,定位php腳本, 查出真正導致php執行時間過長的原因(循環嵌套過多,數據庫死鎖)
3.高並發的話考慮php-fpm.conf中的max_children最大子進程數
4.是否啟動php-fpm