502 bad gateway首先从字面上翻译:错误的网关
简单来说就是服务器没有相应,也就是我们的web服务器没有接到有效的信息导致的,产生错误的原因有很多,连接超时、设置代理、请求过多导致无法响应等等,都有可能导致请求502 Bad Gateway。
以下是搜集整理的一些502错误的排查方法,供参考:
502错误的原因比较多,首先排查一下访问的电脑有没有设置代理。
是因为在代理模式下访问也是有可能报502的。
502 bad gateway
第二是用ipconfig命令或右键网络图形化界面查看ip和DNS,看下是否有问题
502 bad gateway
DNS 缓冲或者DNS设置不正确都有可能导致502。 这种情况的通常原因是因为你在未开启的情况下访问了facebook这样的网站。这个时候自然访问不上,同时却在本机留下了缓冲。 这种情况通常在几分钟之内就可以访问了。也可以尝试 在dos窗口运行 ipconfig /flushdns,该命令会刷新DNS缓冲dns 被劫持了,即使使用国外的dns,也会被劫持。有些机子开能够访问,有些 机子确不能。并且排除了代理、防火墙、本地网络的原因。这个时候同时ping远程网站,比如facebook。不能访问的机子通常获取了一个怪异的ip, 从任何地方都ping不通的ip。而能访问的机子ip,在不能访问的机子上直接可以访问,也可以ping通。这种情况我们可以去掉VPN服务器的DNS。切换另外的dns。在windows系统中,可以在本地网络连接的属性中, 去掉默认的dns,选用国外的dns,比如google的114的。或opendns。
上面几部都检查完了,最后清楚一下浏览器的缓存,CTRL+F5强制刷新页面。
如果是Nginx搭建的服务,则尝试如下方法。
Nginx服务器上发现502错误,很多情况下并非Nginx本身的问题。就以Nginx+PHP+MySQL这种架构说明。Nginx本身设置等cgi接口返回的数据延时太短,要延长这个时间。如同前面说的,很多情况下并非Nginx本身的问题,这样操作后常常并不能缓解问题。此时,就要考虑对应cgi接口的配置,比php-fpm.conf 的配置,脚本执行时间的超时情况限制。这可以通过跟踪php-fpm的 slow log 来排查,对相关代码优化,减少延时。另外很大的问题在MySQL数据库这一块如果数据库执行命令超时也会大延长php脚本的执行时间,导致 Nginx 等待超时。可以my.cnf的 slow log进行确认效能低下的sql语句是哪些,进行优化配置。通过优化 php-fpm 及 MySQL的配置都大大减少Nginx的等待超时的情况。
fastcgi缓冲区设置过小
确认这个问题首先要看nginx的日志文件,目录为/var/log/nginx,如果在日志中发现了类似如下错误。
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;
请根据服务器已经网站的情况自行增大上述两个配置项。
二、代理缓冲区设置过小
如果你使用的是nginx反向代理,如果header过大,超出了默认的1k,就会引发上述的upstream sent too big header (说白了就是nginx把外部请求给后端处理,后端返回的header太大,nginx处理不过来就会导致502。
server {
listen 80;
server_name *.lxy.me;
location / {
###############添加这3行
proxy_buffer_size 64k;
proxy_buffers 32 32k;
proxy_busy_buffers_size 128k;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
00001.
三、默认php-cgi的进程数设置过少
在安装好使用过程中出现502问题,一般是因为默认php-cgi进程是5个,可能因为phpcgi进程不够用而造成502,需要修改/usr/local/php/etc/php-fpm.conf 将其中的max_children值适当增加。也有可能是max_requests值不够用。需要说明的是这连个配置项占用内存很大,请根据服务器配置进行设置。否则可能起到反效果。
四、php执行超时
php执行超时,修改/usr/local/php/etc/php.ini 将max_execution_time 改为300
五、nginx等待时间超时
部分PHP程序的执行时间超过了Nginx的等待时间,可以适当增加nginx.conf配置文件中FastCGI的timeout时间
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
502 bad gateway
502错误还有一个经常出现情况就是后端主机宕机。在配置里有这么一项配置:,这个配置指定了在从一个后端主机取数据遇到何种错误时会转到下一个后端主机,里头写上的就是会出现502的所有情况拉,默认是。就是宕机、断线之类的,就是读取堵塞超时,比较容易理解。我一般是全写上的:
默认的进程数设置过少在安装好使用过程中出现502问题,一般是因为默认进程是5个,可能因为进程不够用而造成502,需要修改/usr//php/etc/.conf将其中的值适当增加。也有可能是值不够用。需要说明的是这连个配置项占用内存很大,请根据服务器配置进行设置。否则可能起到反效果。
将请求提交给网关如执行,但是由于某些原因没有执行完毕导致进程终止执行。说到此,这个问题就很明了了,与网关服务如的配置有关了。.conf配置文件中有两个参数就需要你考虑到,分别是和。最大子进程数,在高并发请求下,达到最大响应数,后续的请求就会出现502错误的。可以通过命令来查看当前连接数。设置单个请求的超时终止时间。还应该注意到php.ini中的参数。当请求终止时,也会出现502错误的。当积累了大量的php请求,你重启释放资源,但一两分钟不到,502又再次呈现,这是什么原因导致的呢?这时还应该考虑到数据库,查看下数据库进程是否有大量的进程,数据库死锁导致超时,前端终止了继续请求,但是SQL语句还在等待释放锁,这时就要重启数据库服务了或kill掉死锁SQL进程了。