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

Nginx 502 Bad Gateway 的错误已经遇到好几次了,这里做一下记录,备忘哈哈。

会有好多种情况出现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;
  ...
}

请根据服务器已经网站的情况自行增大上述两个配置项。

二、代理缓冲区设置过小

如果你使用的是nginx反向代理,如果header过大,超出了默认的1k,就会引发上述的upstream sent too big header (说白了就是nginx把外部请求给后端处理,后端返回的header太大,nginx处理不过来就会导致502。

server {
    listen    80;
    server_name *.lxy.me;
    location / {
###############添加这3行
        proxy_buffer_size 64k;
       proxy_buffers  32 32k;
       proxy_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;
 .....
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 深入探讨:Nginx 502 Bad Gateway错误的解决方法

    max_children=40 , 每个children平均占用20M-30M内存,children越多,可以同时接受的并发数量越多,一般children的值是网站最高并发数+浮动值,这值再×内存占用,就是你需要用到的内存.max_requests = N 是指当每个children接受了N次请求以后,就会把自己杀死,然后重新建立一个children.PV / max_children = 每一个children接受的request次数[ 默认预设浏览一个只调用一次PHP程序,或许异步调用呢?接

  • nginx 502 Bad Gateway 错误解决办法

    一些运行在Nginx上的网站有时候会出现"502 Bad Gateway"错误,有些时候甚至频繁的出现.以下是小编搜集整理的一些Nginx 502错误的排查方法,供参考: Nginx 502错误的原因比较多,是因为在代理模式下后端服务器出现问题引起的.这些错误一般都不是nginx本身的问题,一定要从后端找原因!但nginx把这些出错都揽在自己身上了,着实让nginx的推广者备受置疑,毕竟从字眼上理解,bad gateway?不就是bad nginx吗?让不了解的人看到,会直接把责任推在

  • Nginx 502 bad gateway和Nginx 504 Gateway Time-out错误解决方法 错误解决办法

    最近服务器宕机的现象比较频繁,临下班时分,G给挂掉了,502 Bad Gateway Nginx,不由得让我想起之前的504 Gateway Time-out,两者应该有点联系,一定得弄清楚.Nginx 504 Gateway Time-out的含义是所请求的网关没有请求到,简单来说就是没有请求到可以执行的PHP-CGI. 解决这两个问题其实是需要综合思考的,一般来说Nginx 502 Bad Gateway和php-fpm.conf的设置有关,而Nginx 504 Gateway Time-o

  • nginx加php-fpm出现502 bad gateway错误的5种解决方法

    nginx出现502有很多原因,但大部分原因可以归结为资源数量不够用,也就是说后端php-fpm处理有问题,nginx将正确的客户端请求发给了后端的php-fpm进程,但是因为php-fpm进程的问题导致不能正确解析php代码,最终返回给了客户端502错误. 服务器出现502的原因是连接超时 我们向服务器发送请求 由于服务器当前链接太多,导致服务器方面无法给于正常的响应,产生此类报错 因此如果你服务器并发量非常大,那只能先增加机器,然后按以下方式优化会取得更好效果;但如果你并发不大却出现502,

  • Nginx 502 Bad Gateway错误常见的4种原因和解决方法

    1.FastCGI worker进程数是否不够 通过命令查看服务器上一共开了多少的 php-cgi 进程 复制代码 代码如下: ps -fe |grep "php" | grep -v "grep" | wc -l 使用如下命令查看已经有多少个php-cgi进程用来处理tcp请求 复制代码 代码如下: netstat -anop | grep "php" | grep -v "grep" | wc -l 接近配置文件中设置的数

  • Nginx 遇到502 Bad Gateway 自动重启的脚本代码

    原理就是用curl获取HTTP头,发现502状态码就执行重启php-fpm的命令. 复制代码 代码如下: #!/usr/bin/php <!--$url = 'http://www.jb51.net'; $cmd = '/usr/local/php/sbin/php-fpm restart'; for($i = 0; $i < 5; $i ++){ $exec = "curl connect-timeout 3 -I $url 2>/dev/null"; $res =

  • 解决Nginx + PHP(FastCGI)遇到的502 Bad Gateway错误

    我让按照以下两个步骤去解决,最后在第2步中将FastCGI的timeout时间增加为300,问题解决: PS:比较羡慕迅雷的Web服务器,16G内存. -------------------------------------------------------------------------------- 1.查看当前的PHP FastCGI进程数是否够用: netstat -anpo | grep "php-cgi" | wc -l 如果实际使用的"FastCGI进程

  • Nginx 502 Bad Gateway错误原因及解决方案

    Nginx 502 Bad Gateway 的错误已经遇到好几次了,这里做一下记录,备忘哈哈. 会有好多种情况出现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

  • Nginx 502 bad gateway错误解决的九种方案及原因

    目录 前言 502系列错误代码 5XX系列错误代码 Nginx 502 Bad Gateway 错误的原因及解决方法 1.检查PHP基础设置 2.FastCGI进程是否已经启动 3.FastCGI worker进程数是否不够 4.FastCGI执行时间过长 5.FastCGI Buffer不够 6.FastCGI 缓冲区设置过小 7.代理缓冲区设置过小(使用了nginx反向代理的情况) 8.默认php-cgi的进程数设置过少 9.其它原因 总结 前言 502 Bad Gateway 是一种HTT

  • 502 bad gateway是什么意思 502 bad gateway错误解决方法

    您可以尝试清除浏览器缓存 访问一下你的FTP看是否可以登陆 成功解决502 Bad Gateway错误 今天登陆博客,显示502 bad gateway,NGINX最烦人的地方就是经常会出现这个错误,由于我并不打算在技术上花费过多的时间,所以一般是遇到了相关问题,通过搜索引擎解决后即可,不会去深究.废话不多说,说说我的坎坷经历. 首先,我重启了服务器,可是重启了好几次,都无效,然后去Google搜索了下502 bad gateway,出来了很多的网页,筛选后进入http://lnmp.org/f

  • 前端异常502 bad gateway的原因和解决办法

     502 Bad Gateway服务器作为网关或者代理时,为了完成请求访问下一个服务器,但该服务器返回了非法的应答. 解决办法是:再刷新一下网页或清理一下电脑的缓冲文件在打开你想打开的网页就好了. 一般情况下,这种办法是行得通的,但也不排除你所访问的网页被屏蔽的可能,如果你所访问的网页被屏蔽的话,就不管你怎么刷新也是没用的了. 502 bad gateway报错形成 1.什么是502 bad gateway 报错 简单来说502是报错类型代码bad gateway错误的网关 2.产生502错误的

  • 前端异常502 bad gateway的原因和解决办法

    目录 502 bad gateway报错形成 1.什么是502 bad gateway 报错 2.产生502错误的原因 第一个原因:DNS 缓冲 第二个原因:浏览器代理 第三个原因:dns 被劫持 3.502错误的HTTP周期 4.固定502错误 5.出现502 bad gateway如何解决问题 Nginx 502 Bad Gateway 错误的原因及解决方法 一.fastcgi缓冲区设置过小     二.代理缓冲区设置过小 三.默认php-cgi的进程数设置过少 四.php执行超时 五.ng

随机推荐