Nginx 502 Bad Gateway 错误的原因及解决方法



    Nginx会有好多种情况出现502错误,下面我们分情况来说一下。

    一、fastcgi缓冲区设置过小

    出现错误,首先要查找nginx的日志文件,目录为/var/log/nginx,在日志中发现了如下错误.

    2013/01/17 13:33:47 [error] 15421#0: *16 upstream sent too big header while reading response header from upstream

    查阅了一下资料,大意是nginx缓冲区有一个bug造成的,我们网站的页面消耗占用缓冲区可能过大.

    网上查找了一下解决方法,在国外网站看到了一个增加缓冲区的方法,彻底解决了Nginx 502 Bad Gateway的问题.方法如下:



    http {
        ...
        fastcgi_buffers 8 16k;
        fastcgi_buffer_size 32k;
        ...
    }

    二、代理缓冲区设置过小

    server {
     listen 80;
     server_name *.lxy.me;
     
     location / {
     
    ###############添加这3行
     <span class='wp_keywordlink_affiliate'><a href="http://lxy.me/tag/proxy" title="View all posts in proxy" target="_blank">proxy</a></span>_buffer_size 64k;
     <span class='wp_keywordlink_affiliate'><a href="http://lxy.me/tag/proxy" title="View all posts in proxy" target="_blank">proxy</a></span>_buffers 32 32k;
     <span class='wp_keywordlink_affiliate'><a href="http://lxy.me/tag/proxy" title="View all posts in proxy" target="_blank">proxy</a></span>_busy_buffers_size 128k;
    ###############添加这3行
     proxy_set_header Host $host;
     proxy_set_header X-Real-IP $remote_addr;
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    ............
    }

    三、默认php-cgi的进程数设置过少

    在安装好使用过程中出现502问题,一般是因为默认php-cgi进程是5个,可能因为phpcgi进程不够用而造成502,需要修改/usr/local/php/etc/php-fpm.conf 将其中的max_children值适当增加.也有可能是max_requests值不够用.需要说明的是这连个配置项占用内存很大,请根据服务器配置进行设置.否则可能起到反效果.

    四、php执行超时

    php执行超时,修改/usr/local/php/etc/php.ini 将max_execution_time 改为300

    五、nginx等待时间超时

    部分PHP程序的执行时间超过了Nginx的等待时间,可以适当增加nginx.conf配置文件中FastCGI的timeout时间

    http {
     fastcgi_connect_timeout 300;
     fastcgi_send_timeout 300;
     fastcgi_read_timeout 300;
     ......
     }

    原文:http://lxy.me/nginx-502-bad-gateway-error-causes-and-solutions.html



    本博客所有文章如无特别注明均为原创。
    复制或转载请以超链接形式注明转自枫芸志,原文地址《Nginx 502 Bad Gateway 错误的原因及解决方法
    标签:
    分享:

还没有人抢沙发呢~

无觅相关文章插件,快速提升流量