nginx+php超时,什么情况下会产生502状态码?
发布于 作者:苏南大叔 来源:程序如此灵动~本文描述的nginx
502状态码,依然是超时的情况下才会发生。常见于类*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
相关文章,请点击:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。