502 bad gateway原因及九种解决方案

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

502 bad gateway原因及九种解决方案

502系列错误代码
HTTP Error 502 Bad Gateway HTTP 错误 502 网关错误
HTTP 502
502 Service Temporarily Overloaded 502 服务暂时超载
Temporary Error (502) 临时错误 (502)
502 Server Error: The server encountered a temporary error and could not – – complete your request 502 服务器错误:服务器遇到临时错误,无法完成您的请求
502 Bad Gateway Nginx 502 网关坏 Nginx

5XX系列错误代码
500 Internal Server ErrorWeb 服务器遇到遇到阻止其无法完成其任务(即客户端请求)的条件时,将显示此错误
501 Not Implemented 服务器无法支持或识别请求方法。 它缺少处理请求的功能,因此它会响应此错误
502 Bad Gateway 服务器之间发生了错误,充当代理或网关时,您的服务器在尝试处理请求时未收到上游服务器的正确响应
503 Service Unavailable 由于正在进行维护或服务器当前过载而导致服务器无法处理请求的临时情况
504 Gateway Timeout 服务器再次充当代理或网关时,没有及时从另一个服务器(例如DNS)获得响应,因此它无法处理请求
505 HTTP Version Not Supported 当您的Web服务器不能或将不支持源自请求的HTTP协议版本时,将发生他的错误。 该错误通常包含服务器为什么不合作的描述
Nginx 502 Bad Gateway 错误的原因及解决方法

多数是后端问题也就是PHP的问题, 简单的情况可以刷新(不是一般的刷新哦,Ctrl + F5 强制刷新)解决。在php服务当中,有两个参数非常的重要:max_requestst和max_children,具体的原因必须要查看日志才可以弄明白!

1、检查PHP基础设置 

修改/www/server/php/80/etc/php-fpm.conf request_terminate_timeout = 100 ,把100改成5; php执行超时,修改/usr/local/php/etc/php.ini 将max_execution_time 为300;

2、FastCGI进程是否已经启动

ps aux | grep php

查看是否启动了php-fpm服务;

3、FastCGI worker进程数是否不够 运行linux命令:

netstat -anpo | grep “php-cgi” | wc -l

判断是否接近FastCGI进程,接近配置文件中设置的数值,表明worker进程数设置太少;

4、FastCGI执行时间过长 PHP程序执行时间超过了Nginx等待时间,可以适当增加nginx.conf配置文件中FastCGI的timeout时间,根据实际情况调高以下参数值:

fastcgi_connect_timeout 300; fastcgi_send_timeout 300; fastcgi_read_timeout 300;

5、FastCGI Buffer不够 nginx和apache一样,有前端缓冲限制,可以调整缓冲参数

fastcgi_buffer_size 32k; fastcgi_buffers 8 32k;

6、FastCGI 缓冲区设置过小 首先查找nginx日志文件,目录/var/log/nginx,在日志中发现了如下错误:

[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;
...
}

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

7、代理缓冲区设置过小(使用了nginx反向代理的情况) 如果header过大,超出了默认的1k,就会引发upstream sent too big header

server {
listen 80;
server_name *.test.com;
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;
............
}

8、默认php-cgi的进程数设置过少 在安装好使用过程中出现502问题,一般是因为默认php-cgi进程是5个,可能因为phpcgi进程不够用而造成502,需要修改/usr/local/php/etc/php-fpm.conf 将其中的max_children的值适当增加。也有可能是max_requests的值不够用。需要说明的是这连个配置项占用内存很大,请根据服务器配置进行设置。否则可能起到反效果。

9、其它原因 如果您上网时在您尝试访问的所有网站上都看这个问题,有两种可能 ①你的ISP重大设备故障/过载 ②有问题的内部互联网连接如您的防火墙无法正常运作。 在种情况下,只有您的ISP可以帮助您。在第二种情况下,你需要解决什么,那是阻止你进入互联网。 如果您只有在部分尝试访问的网站中出现此问题,那很可能是一个问题,即这些网站之一,其设备故障或超载。联系你网站的管理员。

声明:本站部分文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。部分文章由注册用户发布,版权归原作者所有,本社区不拥有其著作权,亦不承担相应的法律责任,如你发现本社区有涉嫌抄袭的内容,侵犯了原著者的合法权益,可联系我们进行处理。

给TA赞助
共{{data.count}}人
人已赞助
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索