在nginx+php环境中出现502 bad gateway,大多不是nginx本身的问题,而是fastcgi或php的问题所致。
通常会有如下的几种情况:
1,php.ini的memory_limit 过小(如果有个别php程序进程需要占用极大内存时,这个勿必注意下。)
2,php-fpm.conf 中max_children或者max_requests 设置不合理(设置过小会因为没有足够的cgi进程处理请求,设置过大会出现一会儿有响应正常,一会儿等很久才有响应的情况,一般情况下children按 照内存计算,比如说1G设置64,2G128。
需要根据实际情况自行调整。
另外,查看当前的PHP FastCGI进程数是否够用的命令为:
netstat -anpo | grep “php-cgi” | wc -l
如果实际使用的“FastCGI进程数”接近预设的“FastCGI进程数”,那么,说明“FastCGI进程数”不够用,需要增大。)
3,查看nginx错误日志,发现 pstream sent too big header while reading response header from upstream ,则检查client head buffer,fastcgi buffer size是否过小,可设置为32K。
php程序执行时间过长而超时,检查nginx和fastcgi中各种timeout设置。(nginx 中的 fastcgi_connect_timeout 300; fastcgi_send_timeout 300 :fastcgi_read_timeout 300; keepalive_timeout ; php-fpm中的request_terminate_timeout,php.ini中的max_execution_time)。
php-fpm有一个参数 max_requests ,该参数指明了每个children最多处理多少个请求后便会被关闭。
在大量处理请求下,如果该值设置过小会导致children频繁的自杀和建立而浪费 大量时间,若所有的children差不多都在这个时候自杀,则重建前将没有children响应请求,于是出现502 。可以将该值设置大一些或者是0[无限]。
对于nginx中502的解决方法,就是多看nginx和fastcgi的errorlog,找出问题所在,然后就好解决了。
总结: php-cgi进程数不够用、php执行时间长、或者是php-cgi进程死掉,都会出现502错误。
1、nginx日志配置节
log_format access '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" $http_x_forwarded_for';
include /usr/local/nginx/conf/vhost/*.conf;
2、在vhost中配置
#vim /usr/local/nginx/conf/vhost/www..conf
server
{
listen 80 default;
server_name www.;
index index.html index.htm index.php;
root /data/httpd/csm.shopex.cn;
location ~ .*\.php?$
{
include fastcgi.conf;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 1h;
}
access_log /usr/local/nginx/logs/csm.log access;
}
3、nginx 日志模块的参数说明
$remote_user :用来记录客户端用户名称;
$time_local : 用来记录访问时间与时区;
$request : 用来记录请求的url与http协议;
$status : 用来记录请求状态;成功是200,
$body_bytes_s ent :记录发送给客户端文件主体内容大小;
$http_referer :用来记录从那个页面链接访问过来的;
$http_user_agent :记录客户毒啊浏览器的相关信息;
您可能感兴趣的文章:
nginx 日志分析的实例学习
Nginx日志模块分析详解
Nginx关闭日志的方法
Nginx日志分析 Nginx日志切割与Awstats配置
nginx日志配置、Nginx日志分割
有关nginx日志格式的设计分享
nginx日志统计访问时间的例子
一个分割ngnix网站日志的Shell脚本
nginx日志报大量400错误的解决方法
nginx关闭favicon.ico日志记录的方法
nginx与apache日志格式的区别
nginx日志中记录cookie的实现方法
修改nginx访问日志的时间格式的方法
Nginx日志中过滤关键字的写法
nginx 日志分析实例
以前用的LAMP环境,迁移到阿里云主机总是超时apache溢出,于是换成了LNMP环境。
这前配置的伪静态规则要在nginx服务器上重新配置。
遇到一个问题,如何在nginx环境如何取消目录的PHP执行权限。
参考方法:
将以下代码添加至Server容器中,定义fastcgi的规则之前,如下:
deny all;
}
这样就禁止上传目录执行php程序了。
注意:
代码一定要定义在fastcgi的前面才可以。