Nginx + PHP(php-fpm)遇到的502 Bad Gateway错误

我一个统计程序估计要跑1分多钟以上

查看了一个php-fpm 配置文件

[13-Oct-2013 12:06:07] WARNING: [pool www] child 7458, script '/home/wwwroot/admin/index.php' (request: "GET /index.php") execution timed out (101.515909 sec), terminating
[13-Oct-2013 12:06:07] WARNING: [pool www] child 7458 exited on signal 15 (SIGTERM) after 1130895.840878 seconds from start
[13-Oct-2013 12:06:07] NOTICE: [pool www] child 24885 started

很明显了

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

google了一较以后

http://rtcamp.com/wordpress-nginx/tutorials/php/increase-script-execution-time/ 

Changes in php.ini

If you want to change max execution time limit for php scripts from 30 seconds (default) to 300 seconds.

vim /etc/php5/fpm/php.ini

Set…

max_execution_time = 300

In Apache, applications running PHP as a module above would have suffice. But in our case we need to make this change at 2 more places.

Changes in PHP-FPM

This is only needed if you have already un-commented request_terminate_timeout parameter before. It is commented by default, and takes value of max_execution_time found in php.ini

Edit…

vim /etc/php5/fpm/pool.d/www.conf

Set…

request_terminate_timeout = 300

Changes in Nginx Config

To increase the time limit for example.com by

vim /etc/nginx/sites-available/example.com
location ~ \.php$ {
	include /etc/nginx/fastcgi_params;
        fastcgi_pass  unix:/var/run/php5-fpm.sock;
	fastcgi_read_timeout 300;
}

If you want to increase time-limit for all-sites on your server, you can edit main nginx.conf file:

vim /etc/nginx/nginx.conf

Add following in http{..} section

http {
	#...
        fastcgi_read_timeout 300; 
	#...
}

Reload PHP-FPM & Nginx

Don’t forget to do this so that changes you have made will come into effect:

service php5-fpm reload
service nginx reload

原来,php-fpm有一个参数 max_requests,该参数指明了,每个children最多处理多少个请求后便会被关闭,默认的设置是500。因为php是把请求轮询给每个 children,在大流量下,每个childre到达max_requests所用的时间都差不多,这样就造成所有的children基本上在同一时间 被关闭。

在这期间,nginx无法将php文件转交给php-fpm处理,所以cpu会降至很低(不用处理php,更不用执行sql),而负载会升至很高(关闭和开启children、nginx等待php-fpm),网卡流量也降至很低(nginx无法生成数据传输给客户端)

解决问题很简单,增加children的数量,并且将 max_requests 设置未 0 或者一个比较大的值:

打开 /usr/local/php/etc/php-fpm.conf

然后重启php-fpm。

二、增加缓冲区容量大小

将nginx的error log打开,发现“pstream sent too big header while reading response header from upstream”这样的错误提示。查阅了一下资料,大意是nginx缓冲区有一个bug造成的,我们网站的页面消耗占用缓冲区可能过大。参考老外写的修 改办法增加了缓冲区容量大小设置,502问题彻底解决。后来系统管理员又对参数做了调整只保留了2个设置参数:client head buffer,fastcgi buffer size。

三、request_terminate_timeout

如果主要是在一些post或者数据库操作的时候出现502这种情况,而不是在静态页面操作中常见,那么可以查看一下php-fpm.conf设置中的一项:

request_terminate_timeout

这个值是max_execution_time,就是fast-cgi的执行脚本时间。

0s

0s为关闭,就是无限执行下去。(当时装的时候没仔细看就改了一个数字)

发现,问题解决了,执行很长时间也不会出错了。

优化fastcgi中,还可以改改这个值5s 看看效果。

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

==============================================

我把以上的值300改成1000秒去了

时间: 2024-10-09 10:41:11

Nginx + PHP(php-fpm)遇到的502 Bad Gateway错误的相关文章

nginx 502 Bad Gateway 错误解决办法

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

Nginx提示502 Bad Gateway错误问题解决方法小结

502 Bad Gateway错误问题解决方法 Nginx 502错误的原因比较多,是因为在代理模式下后端服务器出现问题引起的.这些错误一般都不是nginx本身的问题,一定要从后端找原因!但nginx把这些出错都揽在自己身上了,着实让nginx的推广者备受置疑,毕竟从字眼上理解,bad gateway?不就是bad nginx吗?让不了解的人看到,会直接把责任推在nginx身上,希望nginx下一个版本会把出错提示写稍微友好一些,至少不会是现在简单的一句 502 Bad Gateway,另外还不

nginx 502 Bad Gateway 错误解决办法_nginx

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

VPS频繁提示Nginx 502 Bad Gateway错误的解决办法

这是一篇非常有价值的文章,在我们的Linux生产环境实际使用过程中,Nginx也难免会出现这样或是那样的故障,而502 Bad Gateway也是最常见的故障之一,所以整理出Nginx 502 Bad Gateway的一些解决方案!现在Nginx在Webhttp://www.aliyun.com/zixun/aggregation/18665.html">应用领域也是越来越广泛,有很多大型的互联网公司,或是Web站点都将运行平台移植到Nginx中,而相对于Apache所占市场的比例,Ngi

NGINX 502 Bad Gateway错误怎么解决

将网上找到的一些和502 Bad Gateway错误有关的问题和排查方法列一下,先从FastCGI配置入手: 1.查看FastCGI进程是否已经启动 NGINX 502错误的含义是sock.端口没被监听造成的.我们先检查fastcgi是否在运行 2.检查系统Fastcgi进程运行情况 除了第一种情况,fastcgi进程数不够用.php执行时间长.或者是php-cgi进程死掉也可能造成nginx的502错误 运行以下命令判断是否接近FastCGI进程,如果fastcgi进程数接近配置文件中设置的数

解决php导致nginx报502 bad gateway错误问题

502 bad gateway不一定全是nginx,apache之类引起的,也有可能是由其他模块引起的,例如:php 1,查看php-fpm和nginx的log # vim /var/log/nginx/error.log recv() failed (104: Connection reset by peer) while reading response header from upstream # vim /var/log/php-fpm/error.log WARNING: [pool

wordpress安装提示NGINX 502 Bad Gateway错误解决办法

今天在新装的Linode的VPS中搭建搭建一个WORDPRESS站点,谁知道在step=2的时候出现了莫名其妙的502 Bad Gateway错误. 20110112200117-156870207[1] 期初以为是并发和内存的问题,调整了php-fpm.ini,也重新编译了php.结果问题依旧.好吧,查看Centos的日志吧. # less /var/log/messages //系统下查看日志文件. 发现最近的错误在: Jan 26 02:09:40 li631-178 kernel: ph

502 bad gateway是什么意思 502 bad gateway错误解决方法_服务器其它

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

Win7用浏览器打开网页提示502 Bad Gateway错误的三种解决方法

Win7用浏览器打开网页提示502 Bad Gateway错误的三种解决方法   方法一.关闭代理 1.首先可能是我们浏览器使用了代理,我们打开桌面的浏览器找到右上角的工具打开,在下拉菜单中找到代理服务器选项; 2.然后在弹出的代理服务器选项中,选择不使用代理的选项在前面打勾,然后重启浏览器即可. 方法二:关闭不必要的程序 1.出现这种情况的可能是被一些程序拦截导致的,我们右键点击电脑下方任务栏的空白区域; 2.然后在下拉菜单中找到任务管理器,点击进入任务管理器界面; 3.然后在任务管理器中找到

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

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