目录
- 1. 复现错误
- 2. 分析错误
- 2.1 502系列错误代码
- 2.2 5XX系列错误代码
- 3. 产生502错误的原因
- 原因1
- 原因2
- 原因3
- 4. 解决502错误的方法
- 5. 补充说明
- 6. 参考文档
- 总结
1. 复现错误
今天打开某网站时,却报出如下的错误信息:
即报出502 Bad Gateway的错误信息,这个错误信息是什么,又该如何解决呢?
接下来,我便详细分析。
2. 分析错误
2.1 502系列错误代码
502 Bad Gateway是一种HTTP协议的服务器端错误状态代码,它表示作为网关或代理角色的服务器,从上游服务器(如tomcat、php-fpm)中接收到的响应是无效的。
Gateway (网关)在计算机网络体系中可以指代不同的设备,502错误通常不是客户端能够修复的,而是需要由途径的Web服务器或者代理服务器对其进行修复。
502系列错误代码如下列表所示:
2.2 5XX系列错误代码
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服务当中,有两个参数非常的重要:
具体的原因,必须要查看日志,才可以弄明白!
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, 将max_execution_time为300。
2.检查FastCGI进程是否启动
执行linux的如下命令,查看是否启动了php-fpm服务:
ps aux | grep php
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的值不够用。
需要说明的是这连个配置项占用内存很大,请根据服务器配置进行设置。否则可能起到反效果。
5. 补充说明
如果您上网时在您尝试访问的所有网站上都看这个问题,有如下两种可能:
1.你的ISP重大设备故障/过载
在种情况下,只有您的ISP可以帮助您。
2.有问题的内部互联网连接如您的防火墙无法正常运作。
你需要解决什么,那是阻止你进入互联网。
如果您只有在部分尝试访问的网站中出现此问题,那很可能是一个问题,即这些网站之一,其设备故障或超载。联系你网站的管理员。
6. 参考文档
https://www.jb51.net/article/258603.htm
总结
到此这篇关于502BadGateway产生的原因及8个详细的解决方法的文章就介绍到这了,更多相关502BadGateway的原因及解决内容请搜索悠久资源以前的文章或继续浏览下面的相关文章希望大家以后多多支持悠久资源!