
文章目录
1. 复现错误
今天打开某网站时,却报出如下的错误信息:

即报出
502 Bad Gateway
的错误信息,这个错误信息是什么,又该如何解决呢?
接下来,我便详细分析。
2. 分析错误
2.1 502系列错误代码
502 Bad Gateway
是一种
HTTP
协议的服务器端错误状态代码,它表示作为网关或代理角色的服务器,从上游服务器(如
tomcat
、
php-fpm
)中接收到的响应是无效的。
Gateway (网关)
在计算机网络体系中可以指代不同的设备,
502
错误通常不是客户端能够修复的,而是需要由途径的
Web
服务器或者代理服务器对其进行修复。
502
系列错误代码如下列表所示:
HTTP Error 502 Bad Gateway HTTP错误502网关错误HTTP 502502 Service Temporarily Overloaded 502服务暂时超载Temporary Error (502)临时错误 (502)502 Server Error: The server encountered a temporary error and could not - - complete your 6. request 502服务器错误:服务器遇到临时错误,无法完成您的请求502 Bad Gateway Nginx 502``````Nginx错误

2.2 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协议版本时,将发生他的错误。 该错误通常包含服务器为什么不合作的描述。
3. 产生502错误的原因
连接超时,我们向服务器器发送请求时,由于服务器当前连接太多,导致服务器方面无法给于正常的响应,产生此类报错。
具体如所示:
- 原因1
DNS
缓冲,针对这种情况,通常是因为你在未开启
vpn
的情况下,访问了
facebook
这样的网站。
此时,你自然访问不上,同时却在本机留下了缓冲。
这种情况通常在几分钟之内就可以访问了。
也可以尝试在
dos
窗口运行
ipconfig /flushdns
,该命令会刷新
DNS
缓冲。
- 原因2
你的浏览器开了代理什么的,确认一下关掉代理。
- 原因3
dns
被劫持,即使使用国外的
dns
,也会被劫持。
有些机子开
vpn
能够访问,但有些机子不能。
排除了
代理、防火墙、本地网络
的原因,此时同时
ping
远程网站,比如
facebook
。
不能访问的机子,通常获取了一个怪异的
ip
, 从任何地方都
ping
不通的
ip
。
能访问的机子
ip
,在不能访问的机子上直接可以访问,也可以
ping
通。这种情况我们可以去掉
VPN
服务器的
DNS
。
切换另外的
dns
。在
windows
系统中,可以在本地网络连接的属性中, 去掉默认的
dns
,选用国外的
dns
,比如
google
或
opendns
。
4. 解决502错误的方法
Nginx 502 Bad Gateway
错误的原因及解决方法如下所示。
多数是后端的问题, 简单的情况,可以按
Ctrl + F5
强制刷新解决。
如果
Ctrl + F5
无法强制刷新,可以使用
Ctrl + Fn + F5
强制刷新。
在
php服务
当中,有两个参数非常的重要:
max_requeststmax_children
具体的原因,必须要查看日志,才可以弄明白!
- 检查
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
, 将
max_execution_time
为
300
。
- 检查
FastCGI进程是否启动
执行
linux
的如下命令,查看是否启动了
php-fpm
服务:
ps aux |grep php
- 检查
FastCGI worker进程数是否足够
执行
linux
的如下命令:
netstat -anpo |grep “php-cgi” |wc -l
判断是否接近
FastCGI
进程,接近配置文件中设置的数值,表明
worker
进程数设置太少。
- 检查
FastCGI执行时间是否超时
PHP
程序执行时间超过了
Nginx
等待时间,可以适当增加
nginx.conf
配置文件中
FastCGI
的
timeout
时间,根据实际情况调高以下参数值:
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
- 检查
FastCGI Buffer是否足够
nginx
和
apache
一样,有前端缓冲限制,可以调整缓冲参数,如下所示:
fastcgi_buffer_size 32k;
fastcgi_buffers 832k;
- 检查
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 816k;
fastcgi_buffer_size 32k;...}
请根据服务器已经网站的情况自行增大上述两个配置项。
- 检查代理缓冲区的设置是否过小
这是使用了
nginx
反向代理的情况。
如果
header
过大,超出了默认的
1k
,就会引发
upstream sent too big header
,如下所示:
server {
listen 80;
server_name *.test.com;
location /{# 加这3行
proxy_buffer_size 64k;
proxy_buffers 3232k;
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;...}}
- 检查默认的
php-cgi的进程数设置是否过少
在安装好使用过程中出现
502
问题,一般是因为默认
php-cgi
进程是
5
个。
可能因为
phpcgi
进程不够用而造成
502
,需要修改
/usr/local/php/etc/php-fpm.conf
将其中的
max_children
的值适当增加,也有可能是
max_requests
的值不够用。
需要说明的是这连个配置项占用内存很大,请根据服务器配置进行设置。否则可能起到反效果。
5. 补充说明
如果您上网时在您尝试访问的所有网站上都看这个问题,有如下两种可能:
- 你的
ISP重大设备故障/过载
在种情况下,只有您的
ISP
可以帮助您。
- 有问题的内部互联网连接如您的防火墙无法正常运作。
你需要解决什么,那是阻止你进入互联网。
如果您只有在部分尝试访问的网站中出现此问题,那很可能是一个问题,即这些网站之一,其设备故障或超载。联系你网站的管理员。
6. 参考文档
版权归原作者 互联网全栈开发实战 所有, 如有侵权,请联系我们删除。