我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

本文描述的nginx502状态码,依然是超时的情况下才会发生。常见于类*unix系统下,nginxphp-fpm的组合中。如果得到的是502状态码,很有可能发生的情况是:php-fpm自身的问题导致502状态码,无关nginxnginx就是个背锅侠。

苏南大叔:nginx+php超时,什么情况下会产生502状态码? - nginx502状态
nginx+php超时,什么情况下会产生502状态码?(图5-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的编程经验总结。本文测试环境:centos@7.9.2009nginx@1.20.2php-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可以控制最终的执行时间(单位秒)。

苏南大叔:nginx+php超时,什么情况下会产生502状态码? - 超时脚本测试代码
nginx+php超时,什么情况下会产生502状态码?(图5-2)

接下来描述的两种情况里面,分别有两个设置(单位秒)。

  • php.inimax_execution_time
  • php-fpm.confmax_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状态,但是,确实粗略上有效果。

苏南大叔:nginx+php超时,什么情况下会产生502状态码? - fpm502-2
nginx+php超时,什么情况下会产生502状态码?(图5-3)

情况二,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的设置,优先级较高。

苏南大叔:nginx+php超时,什么情况下会产生502状态码? - 超时设置优先级
nginx+php超时,什么情况下会产生502状态码?(图5-4)

情况三,php-fpm挂了

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

苏南大叔:nginx+php超时,什么情况下会产生502状态码? - 502badgateway
nginx+php超时,什么情况下会产生502状态码?(图5-5)

相关文章

结语

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

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   php    nginx