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

这篇具有很好参考价值的文章主要介绍了PHP+Nginx经常出现502、504原因与解决方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

很多新手刚开始做网站可能感觉不到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的相关问题。

1、Nginx 502 Bad Gateway 原因与解决方法

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

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

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

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

nginx 并发502,杂文笔记,php,nginx,数据库

[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;
}

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

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

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

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

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

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

nginx 并发502,杂文笔记,php,nginx,数据库

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

总结:

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

经过我的的测试,我发现pm.max_requests设置太大会出现504 Gateway Time-out,pm.max_requests设置太小,平均负载 Load Average又会超出正常值的范围,甚至更高。文章来源地址https://www.toymoban.com/news/detail-610871.html

到了这里,关于PHP+Nginx经常出现502、504原因与解决方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • nginx+php 出现502 bad gateway

    nginx+php 出现502 bad gateway,一般这都不是nginx的问题,而是由于 fastcgi或者php的问题导致的,常见的有以下几种。 1.   php.ini 的memory_limit 过小(如果有个别php程序进程需要占用极大内存时这个必须注意) 2.   php-fpm.conf 中max_children或者max_requests  设置不合理(设置过小会因为没

    2024年02月12日
    浏览(33)
  • 服务器报错nginx 502 Bad Gateway的原因以及解决办法

    网站页面出现502badgateway怎么办?今天我们来分析一下原因和解决办法。 nginx出现502多数是属于后端的问题,后期就是PHP的问题,在php服务当中,有两个参数非常的重要:max_requestst 和max_children;具体的原因必须要查看日志才可以弄明白! 1:FastCGI进程是否已经启动 ps aux|grep

    2023年04月20日
    浏览(48)
  • nginx服务器报错502 Bad Gateway的原因以及解决办法

    服务器报错nginx 502 Bad Gateway的原因以及解决办法_502 bad gateway nginx_主题模板站的博客-CSDN博客

    2024年02月13日
    浏览(36)
  • 服务器出现500、502、503错误的原因以及解决方法

    服务器我们经常会遇到访问不了的情况有的时候是因为我们服务器被入侵了所以访问不了,有的时候是因为出现了服务器配置问题,或者软硬件出现问题导致的无法访问的问题,这时候会出现500、502、503等错误代码。基于以上问题我们第一步可以先重启服务器,一般重启服务

    2024年01月18日
    浏览(48)
  • nginx反向代理502-Bad Gateway问题解决方法

    用nginx反向代理 localhost:80 域名到服务器 localhost:8080 端口服务时,访问出现502 bad gateway 原因分析: 1.查看8080端口服务启动 2.查看错误日志:error.log,以centos7.x为例: 192.168.10.202 - - [08/May/2023:20:53:43 +0800] \\\"GET /jenkinsx/ HTTP/1.1\\\" 502 3693 \\\"-\\\" \\\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/53

    2024年02月06日
    浏览(76)
  • Nginx反向代理出现错误 502 bad gateway 案例解析

    Nginx + uwsgi + flask Flask框架写的程序,使用uwsgi启动,Nginx作为反向代理调用Flask应用。 Flask应用有些操作时间比较长,会超过1分钟,在网页端访问会出现错误: 502 bad gateway。 Nginx的错误日志中会出现错误:upstream prematurely closed connection while reading response header from upstream 经过网上

    2024年02月08日
    浏览(29)
  • 解决nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use)以及nginx 502 Bad Gateway解决方法

    今天早晨到公司,打开测试环境的登录网页,如下图所示: 输入用户名和密码,点击 login ,一直无法登录。 于是,打开控制台,却发现报出如下错误: 于是,登录 nginx 所在的服务器,使用如下命令,找到 nginx 的安装目录:

    2024年02月08日
    浏览(40)
  • Nginx应用 解决Nginx - 504 Gateway Time-out问题

    目录 问题背景 问题分析 解决方法 拓展知识 问题背景 线上有个系统,最前端是设置了nginx作为代理,有个1个请求的接口需要耗时1.1分钟左右,老是出现Nginx - 504 Gateway Time-out的错误。 问题分析 绕过nginx直接访问应用tomcat直接的端口进行相同条件测试,发现没有问题,排除接

    2024年02月13日
    浏览(26)
  • 解决504 GATEWAY TIMEOUT Nginx网关超时

    最近遇到一个问题504 GATEWAY TIMEOUT的问题,在浏览器的NetWork里面看是这个效果。时间大概是60s。 目前后端技术架构主要是nginx和php-fpm,前端主要是vue框架打包发布。 于是首先想到了是nginx超时时间或者与php的超时时间设置的过段,然后配置nginx.conf设置了这些参数。 然后发现

    2024年02月02日
    浏览(40)
  • nginx405异常原因及解决方法

    nginx405异常原因与解决方法,最详细解释 访问接口出现 出现这个原因是因为当前接口没有在nginx中配置解析到的路径 例如你通过post访问了www.xxx.com/v1/getinfo 但是v1这个路径并没有在nginx中配置,所以nginx自动匹配到的就是/路径,但是/路径是访问静态资源的,只能通过get方法访

    2024年02月06日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包