nginx+php超时,什么情况下会产生502状态码?
发布于 作者:苏南大叔 来源:程序如此灵动~
本文描述的nginx502状态码,依然是超时的情况下才会发生。常见于类*unix系统下,nginx和php-fpm的组合中。如果得到的是502状态码,很有可能发生的情况是:php-fpm自身的问题导致502状态码,无关nginx,nginx就是个背锅侠。

苏南大叔的“程序如此灵动”博客,记录苏南大叔的编程经验总结。本文测试环境:centos@7.9.2009,nginx@1.20.2和php-fpm@8.3.1。值得注意的是:php-fpm只存在于非windows系统下,windows系统下的是php-cgi,两者有着运行机制上的不同。
测试龙套脚本
写个脚本,执行30秒以上,比如:
$t = @intval($_GET["t"]);
$t = ($t <= 0) ? 3 : $t;
sleep($t);
echo "sleep {$t} 秒";
phpinfo();为了方便测试,这个外部参数t可以控制最终的执行时间(单位秒)。

接下来描述的两种情况里面,分别有两个设置(单位秒)。
php.ini的max_execution_time。php-fpm.conf的max_execution_time。
两者是同样的效果作用,默认情况下,php-fpm.conf中的max_execution_time的配置是被注释掉的。或者保持与php.ini中的max_execution_time一致。默认值100,最小值30。强制设置小于30的话,php-fpm就会不能启动。
情况一,php.ini设置
php.ini中的设置叫:max_execution_time。
max_execution_time = 50测试效果上来看,虽然并不是严格按照这个设置的数值展示502状态,但是,确实粗略上有效果。

情况二,php-fpm.conf设置
php-fpm.conf的这个文件名字是可以自定义的,所以有的地方叫做php-fpm.d/www.conf。在苏南大叔的测试服务器上面,这个路径是:/www/server/php/83/etc/php-fpm.conf。
例如:
request_terminate_timeout = 30测试效果可以表明:这个php-fpm.conf的设置,优先级较高。

情况三,php-fpm挂了
这个应该是最常见的情况了,php-fpm挂了,自然是超时了,显示502状态码。

相关文章
结语
nginx只是个背锅侠,502错误本质上基本上都是php-fpm的问题。更多nginx相关文章,请点击: