问题原因分析: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)
![](https://img2018.cnblogs.com/blog/1353593/201905/1353593-20190515101318870-1898796006.jpg)
- 在项目根目录下写一个test.php 测试脚本代码如下:
sleep(10);
echo '123';
- 浏览器访问http://www.flyeagle.club/test.php 结果如下:
- 查看谷歌浏览器的调试工具显示:
![](https://img2018.cnblogs.com/blog/1353593/201905/1353593-20190515101650719-1062584027.png)
解决方案:
1.适当增大php脚本执行时间,通过修改php.ini或php-fpm.conf来配置
2.从根本原因出发,定位php脚本, 查出真正导致php执行时间过长的原因(循环嵌套过多,数据库死锁)
3.高并发的话考虑php-fpm.conf中的max_children最大子进程数
4.是否启动php-fpm