深入分析nginx502和504错误问题及解决方法

在使用Nginx时,经常会碰到502 Bad Gateway和504 Gateway Time-out错误,下面以Nginx+PHP-FPM来分析下这两种常见错误的原因和解决方案。

1.502 Bad Gateway错误

在php.ini和php-fpm.conf中分别有这样两个配置项:max_execution_time和request_terminate_timeout。
这两项都是用来配置一个PHP脚本的最大执行时间的。当超过这个时间时,php-fpm不仅会终止脚本的执行,
还会终止执行脚本的worker进程。所以nginx会发现与自己通信的连接断掉了,就会返回给客户端502错误。

以php-fpm的request_terminate_timeout=30 秒时为例,报502 Bad Gateway错误的具体信息如下:

1)Nginx错误访问日志:

2013/09/19 01:09:00 [error] 27600#0: *78887 recv() failed (104: Connection reset by peer) while reading response header from upstream,
client: 192.168.1.101, server: test.com, request: “POST /index.php HTTP/1.1″, upstream: “fastcgi://unix:/dev/shm/php-fcgi.sock:”,
host: “test.com”, referrer: “http://test.com/index.php”

2)php-fpm报错日志:

WARNING: child 25708 exited on signal 15 (SIGTERM) after 21008.883410 seconds from start

所以只需将这两项的值调大一些就可以让PHP脚本不会因为执行时间长而被终止了。request_terminate_timeout可以覆盖max_execution_time,
所以如果不想改全局的php.ini,那只改php-fpm的配置就可以了。

此外要注意的是nginx的upstream模块中的 max_fail 和 fail_timeout 两项。有时Nginx与上游服务器(如Tomcat、FastCGI)的通信只是偶然断掉了,
但max_fail如果设置的比较小的话,那么在接下来的fail_timeout时间内,nginx都会认为上游服务器挂掉了,都会返回502错误。
所以可以将 max_fail 调大一些,将 fail_timeout 调小一些。

2.504 Gateway Time-out错误

php-fpm设置的脚本最大执行时间已经够长了,但执行耗时php脚本时,发现nginx报错从502变为504了。这是为什么呢?
因为我们修改的只是php的配置,nginx中也有关于与上游服务器通信超时时间的配置:

fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;

以nginx超时时间为90秒,php-fpm超时时间为300秒为例,报504 Gateway Timeout错误时的Nginx错误访问日志如下:

2013/09/19 00:55:51 [error] 27600#0: *78877 upstream timed out (110: Connection timed out) while reading response header from upstream,
client: 192.168.1.101, server: test.com, request: “POST /index.php HTTP/1.1″, upstream: “fastcgi://unix:/dev/shm/php-fcgi.sock:”,
host: “test.com”, referrer: “http://test.com/index.php”

调高这三项的值(主要是read和send两项,默认不配置的话Nginx会将超时时间设为60秒)之后,504错误也解决了。
而且这三项配置可以配置在http、server级别,也可以配置在location级别。担心影响其他应用的话,就配置在自己应用的location中。

注意:

以下部分是对FastCGI生效

fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;

以下部分是对proxy_pass生效

proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;

配置举例:

location ~ \.php$ {
root /home/test.com;
include fastcgi_params;
fastcgi_connect_timeout 180;
fastcgi_read_timeout 600;
fastcgi_send_timeout 600;
fastcgi_pass unix:/dev/shm/php-fcgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /home/cdai/test.com$fastcgi_script_name;
}

时间: 2024-09-20 06:10:10

深入分析nginx502和504错误问题及解决方法的相关文章

阿里云 CDN 504错误几种解决方法

    最近帮朋友公司的网站配置阿里云CDN服务.开通阿里云CDN,并把域名的CName解析到阿里云指定的域名后,运行一段时间,发现 CDN后台很多504错误提示.      一般代理服务器出现504错误,是web后端服务器无响应,或者响应超时造成的.所以根据以上逐步分析解决. 1.修改本地电脑hosts,把域名直接指向服务器IP,访问服务器速度是否正常,如果不正常,说明服务器配置低或者服务器分配给网站的资源已使用差不多啦!此时建议升级服务器配置,或者优化web服务: 2.如果是cdn加速的域名

Nginx服务器中414错误和504错误的配置解决方法_nginx

414 Request-URI Too Large #客户端请求头缓冲区大小,如果请求头总长度大于小于128k,则使用此缓冲区, #请求头总长度大于128k时使用large_client_header_buffers设置的缓存区 client_header_buffer_size 128k; #large_client_header_buffers 指令参数4为个数,128k为大小,默认是8k.申请4个128k. large_client_header_buffers 4 128k; 当http

使用u盘时弹出错误提示0x80070570解决方法

  使用u盘时弹出错误提示0x80070570解决方法来啦~相信很多朋友在使用U盘都遇到了错误提示0x80070570,遇到这情况该怎么解决呢?下文小编就为大家带来使用u盘时弹出错误提示0x80070570的解决方法,一起去了解下吧. 使用u盘时弹出错误提示0x80070570解决方法: 1.先检查u盘是否能够正常被电脑识别到,如果可以识别到那么再确认u盘中的文件数据是否重要,如果不重要,那么重新格式化u盘即可解决问题; 2.如果u盘中有重要文件时那么再尝试使用下面的操作解决问题: ①.将鼠标移

Win8系统安装iTunes出现错误2503的解决方法

  Win8系统安装iTunes出现错误2503的解决方法 解决方法 1.查看本机电脑数位,计算机---右键---属性---看是32的还是64的; 2.官网下载数位对应的iTunes; 3.卸载原有程序,包括所有apple开头的程序,以及itunes,还有bonjour程序,不然安不上;安装iTunes,最好C盘,不要更改自然出现的路径'可以在安全模式下安装;最好管理员授权安装;

win7电脑开机后显示CPU Fan Error错误提示的解决方法

win7电脑开机后显示CPU Fan Error错误提示的解决方法 方法一: 如果出现CPU风扇接线接错的情况会导致出现CPU Fan Error提示,打开机箱检查CPU风扇是否连接到主板对应的接口即可. 方法二: 开机后就按下DEL键进入BIOS,进入POWER的Hardware Monitor,将CPU FAN SPEED项改成IGNORED,CHASSIS FANSPEED项改成N/A,POWER FAN SPEED项改成IGNORED,然后看是否还会出现错误提示. 方法三: 或者是由于一

win8系统安装Office时提示”错误1911“的解决方法

win8系统安装Office时提示"错误1911"的解决方法 1.看到安装的过程中,一个名为INKDIV.dll的动态库文件无法正常完成注册.说明之前Office程序的参与还在,需要清理一下; 2.这个问题比较普遍,这是Office程序特有的故障,而且微软也有专用工具用以处理这样的问题.这个专用工具,是一个全英文的程序,但是操作还是比较简单的.首先下载工具.解压.百度云网盘分享路径是:全部文件 > 维护电脑 > 清理卸载 > [微软专用卸载工具]地址:http://p

Win8系统笔记本创建WiFi时提示错误1061的解决方法

Win8系统笔记本创建WiFi时提示错误1061的解决方法   解决方法如下: 1.检查笔记本电源是否连上,接上电源看是否能启用wifi共享服务. 2.设备管理-网络适配器 里面将驱动程序升级到最新(如果装的是win8驱动一般是最新的),再尝试启用共享. 3.如果前两步还没有解决,仍然提示错误1061,你就试试最麻烦的一步:准备杀毒吧. windows7教程 windows8教程 windows10教程

宽带连接错误769的解决方法

宽带连接错误769的解决方法: 方法一:有本地连接,但是被禁止首先点击电脑桌面右下角的网络. 在网络列表中打开网络共享中心 在网络共享中心打开更改适配器设置. 找到本地连接 右键单击本地连接,选择连接. 等待连接完毕,这样我们就完成了设置. 方法二:没有本地连接怎么办如果你的电脑的网络中心没有本地连接,那么你需要调出本地连接.首先点击开始--控制面板. 在控制面板中找到系统和安全 在系统和安全里找到管理工具 在管理工具中找到服务,并打开之 在服务中,找到network connection,右键

win7系统宽带连接错误734的解决方法

win7系统宽带连接错误734的解决方法   解决方法: 一.右键网上邻居,选择属性,将里面的宽带连接删除掉,重新建立宽带连接. 二.检查你的网络是否开通了绿色上网,如果有的话马上关掉. 三.可在网络连接--属性--安全--验证我的身份中,选择"没有安全措施的密码",也许能解决问题. 四.更新电脑网卡的驱动程序. 五.致电ISP询问,删除所有网络组件重新安装网络. 六.可卸载原拔号程序,重新下载安装互联星空或新建宽带连接.在关机时先关掉宽带连接. 七.可在本地连接里面把micosoft