zoukankan      html  css  js  c++  java
  • NGINX 502 Bad Gateway

    介绍编辑

    NGINX 502 Bad Gateway错误出现的原因较多,对于后端连接PHP服务的场景下,常见的原因有php服务响应超时,php进程不足等引起的一类服务器错误。

    2发生原因编辑

    1、PHP FastCGI进程数不够用
    当网站并发访问巨大时,php fastcgi的进程不一定能响应所有的访问,因为cgi是单线程多进程工作的,也就是说cgi需要处理完一个页面后再继续下一个页面。如果进程数不够,cgi按排队处理之前的请求,队列满之后的请求只有被放弃。这个时候nginx就会不时的出现502错误。这种情况下,开启Nginx的错误日志可以很清晰的看见相应的报错,例如”all backends could not serve”。
    2、PHP FastCGI的内存不够用
    当nginx返回静态页面时,这个问题一般不会出现,因为nginx不需要php cgi的处理而直接返回静态页面。但是当网页需要处理大量的php复杂操作的时候,例如执行api采集,或者采集页面的时候,那对php的要求是相当高的,如果配置给他的内存太少,那很容易就会导致php崩溃。

    3解决方法编辑

    1、首先判断是不是php fastcgi进程数是否够用。
    netstat -anpo | grep "php-cgi" | wc -l
    如果实际使用的“FastCGI进程数”接近预设的“FastCGI进程数”,那么,说明“FastCGI进程数”不够用,需要增大。 但是要注意计算你的内存是否足够支撑更多的进程数,如果物理机内存并不足够大,加大这个进程数是没有用处的。
    2、部分PHP程序的执行时间超过了Nginx的等待时间,可以适当增加nginx.conf配置文件中FastCGI的timeout时间,如下:
    http
    {
    ......
    fastcgi_connect_timeout 300;
    fastcgi_send_timeout 300;
    fastcgi_read_timeout 300;
    ......
    }
    ......
    php.ini中memory_limit设低了会出错,修改了php.ini的memory_limit为64M,重启nginx,发现好了,原来是PHP的内存不足了。
    如果以上方法依然不能解决问题,请尝试优化你的php程序,尽量的减少采集和数据库操作,加快其反应速度,有时候往往是因为自己的php程序反应速度太慢造成的。
    自动修正nginx502错误
    有些时候,502错误是不可避免的,可能是间歇性的,几天或者几周出现一次,这个时候我们需要一个监控程序,每分钟去检测一下系统的可用性,从而最大限度的减少停机时间。
    监控502的脚本
    cd /
    vi 脚本名
    #!/bin/sh
    if [ -e /var/lock/subsys/502 ]
    then
    killall -9 curl 2>/dev/null
    killall -9 php-cgi 2>/dev/null
    phpfpm start >/dev/null
    echo "[ `date +'%h %d %T'` ] PHP-FPM died with no response, all processes restarted">>/path/to/log
    else
    touch /var/lock/subsys/502
    if [ `curl --connect-timeout 5 -I 你的监控网址 >/dev/null | grep '502 Bad Gateway' -c` != '0' ]
    then
    killall -9 php-cgi 2>/dev/null
    phpfpm start >/dev/null
    echo "[ `date +'%h %d %T'` ] PHP-FPM died with 502 bad gateway, all processes restarted">>/path/to/log
    fi
    rm -f /var/lock/subsys/502
    fi
    crontab -e
    加入一分钟检测一次这个脚本
    通过以上的步骤基本上可以了解和解决 NGINX 502 Bad Gateway
  • 相关阅读:
    08.Linux系统-Fastdfs分布式文件系统-互为主从配置搭建部署
    07.Linux系统-GitLab版本控制服务安装部署
    06.Linux系统-WCP知识共享平台安装部署(旗舰版)
    01.Linux-CentOS系统清理缓存脚本
    15.Linux-CentOS系统重启网卡ping不通问题(云环境)
    14.Linux-CentOS系统proc文件系统丢失
    设置环境变量遇到的难题,cmd管理员方式与普通方式的区别,通过C#代码设置环境变量
    DataGridView 行数据验证:当输入数据无效时不出现红色感叹号的Bug
    VS2017新建项目的模板之配置
    禅道安装
  • 原文地址:https://www.cnblogs.com/lixiuran/p/3688509.html
Copyright © 2011-2022 走看看