502 Bad Gateway产生的原因及8个详细的解决方法总结
作者:互联网全栈开发实战
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 502
502 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_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
, 将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
总结
到此这篇关于502 Bad Gateway产生的原因及8个详细的解决方法的文章就介绍到这了,更多相关502 Bad Gateway的原因及解决内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- 502 bad gateway是什么意思 502 bad gateway错误解决方法
- Nginx 502 Bad Gateway错误原因及解决方案
- Nginx 502 bad gateway错误解决的九种方案及原因
- Nginx 502 Bad Gateway错误常见的4种原因和解决方法
- nginx服务器异常502 bad gateway原因排查
- 深入探讨:Nginx 502 Bad Gateway错误的解决方法
- Nginx 502 bad gateway和Nginx 504 Gateway Time-out错误解决方法 错误解决办法
- nginx加php-fpm出现502 bad gateway错误的5种解决方法
- 解决Nginx + PHP(FastCGI)遇到的502 Bad Gateway错误
- nginx 502 Bad Gateway 错误解决办法