广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP+Nginx经常出现502、504原因与解决方法
  • 950
分享到

PHP+Nginx经常出现502、504原因与解决方法

phpnginx数据库 2023-08-31 16:08:01 950人浏览 薄情痞子
摘要

很多新手刚开始做网站可能感觉不到502,504的问题,当等你网站到达了一定水平的时候,流量起来的时候,你会发现经常会遇到502、504类似的问题。 一、什么是502状态码? 502 Bad Gateway:作为网关或者代理工作的服务器尝试

很多新手刚开始做网站可能感觉不到502,504的问题,当等你网站到达了一定水平的时候,流量起来的时候,你会发现经常会遇到502、504类似的问题。

一、什么是502状态码?

502 Bad Gateway:作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。

二、502 Bad Gateway 原因一般有哪些?

将请求提交给网关如PHP-fpm执行,但是由于某些原因没有执行完毕导致php-fpm进程终止执行。这个问题与网关服务如php-fpm的配置有关。

php-fpm.conf配置文件中有两个参数就需要你考虑到,分别是max_children和request_terminate_timeout。

  • max_children最大子进程数,在高并发请求下,达到php-fpm最大响应数,后续的请求就会出现502错误的。可以通过netstat命令来查看当前连接数。

  • request_terminate_timeout设置单个请求的超时终止时间。还应该注意到php.ini中的max_execution_time参数。当请求终止时,也会出现502错误的。

当积累了大量的php请求,你重启php-fpm释放资源,但一两分钟不到,502又再次呈现,这是什么原因导致的呢? 这时还应该考虑到数据库,查看下数据库进程是否有大量的locked进程,数据库死导致超时,前端终止了继续请求,但是sql语句还在等待释放锁,这时就要重启数据库服务了或kill掉死锁SQL进程了。

三、什么是504状态码?

504 Gateway Time-out:作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如Http、FTP、LDAP)或者辅助服务器(例如DNS)收到响应。

四、504 Gateway Time-out 原因一般有哪些?

504错误一般是与Nginx.conf 配置有关。主要与以下几个参数有关:

fastcgi_connect_timeout

fastcgi_send_timeout

fastcgi_read_timeout

fastcgi_buffer_size

fastcgi_buffers

fastcgi_busy_buffers_size

fastcgi_temp_file_write_size

fastcgi_intercept_errors

特别是前三个超时时间。如果fastcgi缓冲区太小会导致fastcgi进程被挂起从而演变为504错误。

五、关于PHP+Nginx经常出现502、504的解决方法

由于不同的原因,解决方法也是不一样的,一定要根据实际的情况去分析。例如,以下是我以前遇到的502的相关问题。

Nginx 502 Bad Gateway 原因与解决方法

Nginx报错:upstream timed out (110: Connection timed out) 原因与解决方法

今天重点说下我遇到504问题的解决方法。

由于我用的是PHP+Nginx+百度云加速CDN,然后,百度云加速CDN一直给我报504错误,我排查了很多也没有找到原因。

最初我以为修改nginx.conf,增加如下“error Connection timed out and 504 error”的代码可以解决这个问题。

[root@localhost /]# vim nginx.confserver {        listen 80;        server_name zabbix.gree.com;        access_log /roobo/logs/nginx/zabbix.gree.com_access.log main;        error_log /roobo/logs/nginx/zabbix.gree.com_error.log error ;        root /roobo/WEBserver/zabbix;        index index.html index.htm index.php;         location / {            try_files $uri $uri/ /index.php$is_args$args;        }        location ~ \.php$ {            try_files $uri =404;            include fastcgi.conf;            fastcgi_pass 10.7.19.195:9000;        }        #error Connection timed out and 504 error       large_client_header_buffers 4 16k;       client_max_body_size 30m;       client_body_buffer_size 128k;       fastcgi_connect_timeout 300;       fastcgi_read_timeout 300;       fastcgi_send_timeout 300;       fastcgi_buffer_size 64k;       fastcgi_buffers   4 32k;       fastcgi_busy_buffers_size 64k;       fastcgi_temp_file_write_size 64k;}

经过测试,并没有任何效果。

我又自信的以为是我用了FirewallD防火墙的原因,结果我关闭它,测试也没有效果,照样报504错误。

最后当再出现504错误的时候,我直接暴力操作,杀死php-fpm,再重启,就可以恢复正常,从而我判断是php的问题。经过我的排查,发现是“pm.max_requests”这个参数的问题,我最初设置的是204000,现在设置的是20400即可恢复正常,没有再出现504错误了,平均负载 Load Average也在正常的范围类。

但是过一段时间后,又会出现“504连接超时”这个问题。

最终,经过我几天的测试,我最终php-fpm.conf参数调整如下即恢复正常:

注意:这里我顺便说一下,我以前配置的参数是 pm.max_spare_servers = 60; pm.max_requests = 204800;

pm = dynamicpm.start_servers = 20pm.min_spare_servers = 20pm.max_spare_servers = 30pm.max_requests = 20480

总结

通俗点讲,设置“pm.max_requests”参数小一点,就是让php-fpm能够自动的频繁重启,关于具体设置多大?要根据你的服务器配置以及流量状况来分析,自己可以去做测试。

经过我的的测试,我发现pm.max_requests设置太大会出现504 Gateway Time-out,pm.max_requests设置太小,平均负载 Load Average又会超出正常值的范围,甚至更高。

来源地址:https://blog.csdn.net/winkexin/article/details/130628949

--结束END--

本文标题: PHP+Nginx经常出现502、504原因与解决方法

本文链接: https://www.lsjlt.com/news/386108.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作