Chinaunix首页 | 论坛 | 博客
  • 博客访问: 654040
  • 博文数量: 220
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1961
  • 用 户 组: 普通用户
  • 注册时间: 2014-11-04 21:54
文章分类

全部博文(220)

文章存档

2018年(1)

2015年(140)

2014年(79)

我的朋友

分类: 系统运维

2014-12-26 21:45:34

一些运行在Nginx上的网站有时候会出现“502 Bad Gateway”错误,有些时候甚至频繁的出现。有些站长是在刚刚转移到Nginx之后就出现了这个问题,所以经常会怀疑这是不是nginx的问题,但事实上这是个误区。

NGINX 502 Bad Gateway错误是FastCGI有问题,造成nginx 502错误的可能性比较多。将网上找到的一些和502 Bad Gateway错误有关的问题和排查方法列一下,先从FastCGI配置入手:

1.查看FastCGI进程是否已经启动NGINX 502错误的含义是sock、端口没被监听造成的。我们先检查fastcgi是否在运行

2.检查系统Fastcgi进程运行情况除了第一种情况,fastcgi进程数不够用、php执行时间长、或者是php-cgi进程死掉也可能造成nginx的502错误运行以下命令判断是否接近FastCGI进程,如果fastcgi进程数接近配置文件中设置的数值,表明worker进程数设置太少


netstat-anpo|grep"php-cgi"|wc-l    

   

3.FastCGI执行时间过长根据实际情况调高以下参数值

   

fastcgi_connect_timeout300;   

fastcgi_send_timeout300;   

fastcgi_read_timeout300;    

   

4.头部太大    nginx和apache一样,有前端缓冲限制,可以调整缓冲参数

fastcgi_buffer_size32k;   

fastcgi_buffers832k;    

    

如果你使用的是nginx的负载均衡Proxying,调整

 

proxy_buffer_size  16k;   

proxy_buffers      416k;    

   

5.https转发配置错误正确的配置方法


server_name  

location/myproj/repos{   

set$fixed_destination $http_destination;   

if($http_destination~*^https(.*)$)   

{   

set$fixed_destination http$1;   

}   

proxy_set_headerHost$host;   

proxy_set_header X-Real-IP $remote_addr;   

proxy_set_headerDestination$fixed_destination;   

proxy_pass  

}    

    

本文出自 V-ZONE,转载时请注明出处及相应链接。

本文永久链接:






一、查看php-cgi是否在运行

有时候由于网站流量过大或者其它原因,导致php-cgi直接down掉,所以我们得看php-cgi是否在运行。执行如下命令:

ps -A | grep php5-cgi

如果没有运行,手动启动

/etc/init.d/php_cgi start

如果你发现php-cgi不明原因有时候down掉,可以使用下面的脚本临时解决这个问题,添加到cronjob。

if ps aux | grep ‘php5-cgi’ | grep -v grep  > /dev/null ; then          echo "PHP-cgi is runnning !"      else          echo "PHP-cgi is down. Starting over…"          /etc/init.d/php-fcgi start  fi 二、fastcgi进程数不够用、php执行时间长的原因

  fastcgi进程数可以修改php-fpm.conf中的max_children的数值,高峰时php-cgi耗掉的最大内存为20M,请根据自己的内存情况计算了。

   限制php执行时间可以在php-fpm.conf中的request_terminate_timeout设置,这是为了防止php程序的bug导致php-cgi假死。

三、FastCGI执行时间过长

根据实际情况调高以下参数值

fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300;

除了上面列出的三种情况,当然还会有其它原因,但上面三种情况是最常见的

  最近几天发现网通线路的服务器出现流量不稳定的情况,具体的表现是,流量时而高,时而低,在流量低的时候发现系统的负载很小,几乎为0,但是过一会,负载又高上去,流量也上去,很是奇怪,查找了2天没有找到原因,后来看到一边文章,介绍了解决nginx出现502的错误现象,按照这个方法进行尝试,最终还是找到了问题的原因。

  解决步骤如下:

  1、查看当前的PHP FastCGI进程数是否够用

  netstat -anpo | grep "php-cgi" | wc -l

  如果实际使用的"FastCGI进程数"接近预设的"FastCGI进程数",那么,说明"FastCGI进程数"不够用,需要增大。

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

  在做第一步的时候,系统当前的PHP FastCGI进程数明显超过了预设值的64这个数值,在电信的服务器上查看当前的PHP FastCGI进程数没有高于64这个数值,而且网通线路的活动连接明显高于电信的活动连接,准备到晚上的时候看看情况,结果到晚上22:30的时候,查看系统当前的PHP FastCGI进程数明显小于64预设值,当前的活动连接也比原来低很多,由此可以说明出现nginx不稳定的情况是由于服务器访问负载过大引起的,就是加上第二步的错误也不顶作用。

  总结,php-cgi进程数不够用、php执行时间长、或者是php-cgi进程死掉,都会出现502错误。

阅读(2862) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~