502 Bad Gateway产生的原因及8个详细的解决方法总结

 更新时间:2023年05月31日 08:55:11   作者:互联网全栈开发实战  
Nginx 502 Bad Gateway的错误已经遇到好几次了,这里做一下记录,备忘,下面这篇文章主要给大家介绍了关于502 Bad Gateway产生的原因及8个详细的解决方法,文中的介绍非常详细,需要的朋友可以参考下

1. 复现错误

今天打开某网站时,却报出如下的错误信息:

即报出502 Bad Gateway的错误信息,这个错误信息是什么,又该如何解决呢?

接下来,我便详细分析。

2. 分析错误

2.1 502系列错误代码

502 Bad Gateway是一种HTTP协议的服务器端错误状态代码,它表示作为网关或代理角色的服务器,从上游服务器(如tomcatphp-fpm)中接收到的响应是无效的。

Gateway (网关)在计算机网络体系中可以指代不同的设备,502错误通常不是客户端能够修复的,而是需要由途径的Web服务器或者代理服务器对其进行修复。

502系列错误代码如下列表所示:

  1. HTTP Error 502 Bad Gateway HTTP 错误502网关错误
  2. HTTP 502
  3. 502 Service Temporarily Overloaded 502 服务暂时超载
  4. Temporary Error (502) 临时错误 (502)
  5. 502 Server Error: The server encountered a temporary error and could not - - complete your 6. request 502 服务器错误:服务器遇到临时错误,无法完成您的请求
  6. 502 Bad Gateway Nginx 502 Nginx错误

2.2 5XX系列错误代码

  1. 500 Internal Server ErrorWeb 服务器遇到遇到阻止其无法完成其任务(即客户端请求)的条件时,将显示此错误
  2. 501 Not Implemented 服务器无法支持或识别请求方法。 它缺少处理请求的功能,因此它会响应此错误
  3. 502 Bad Gateway 服务器之间发生了错误,充当代理或网关时,您的服务器在尝试处理请求时未收到上游服务器的正确响应
  4. 503 Service Unavailable 由于正在进行维护或服务器当前过载而导致服务器无法处理请求的临时情况
  5. 504 Gateway Timeout 服务器再次充当代理或网关时,没有及时从另一个服务器(例如DNS)获得响应,因此它无法处理请求
  6. 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,比如googleopendns

4. 解决502错误的方法

Nginx 502 Bad Gateway错误的原因及解决方法如下所示。

多数是后端的问题, 简单的情况,可以按Ctrl + F5强制刷新解决。

如果Ctrl + F5无法强制刷新,可以使用Ctrl + Fn + F5强制刷新。

php服务当中,有两个参数非常的重要:

  1. max_requestst
  2. 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_time300

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配置文件中FastCGItimeout时间,根据实际情况调高以下参数值:

fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;

5.检查FastCGI Buffer是否足够

nginxapache一样,有前端缓冲限制,可以调整缓冲参数,如下所示:

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的原因及解决内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Nginx服务器中的模块编写及相关内核源码初探

    Nginx服务器中的模块编写及相关内核源码初探

    这篇文章主要介绍了Nginx服务器中的模块编写及相关源码初探,文中以一个简单的Hello world模块的编写来深入分析Nginx内核所用到的基础函数,需要的朋友可以参考下
    2015-12-12
  • windows安装nginx部署步骤图解(反向代理与负载均衡)

    windows安装nginx部署步骤图解(反向代理与负载均衡)

    这篇文章主要介绍了windows安装nginx部署步骤,设置反向代理与负载均衡的使用方法,需要的朋友可以参考下
    2014-02-02
  • Nginx 多域名配置的方法

    Nginx 多域名配置的方法

    本篇文章主要介绍了Nginx 多域名配置的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • nginx限流及配置管理实战记录

    nginx限流及配置管理实战记录

    流量限制(rate-limiting)是Nginx中一个非常实用,却经常被错误理解和错误配置的功能,下面这篇文章主要给大家介绍了关于nginx限流及配置管理的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • 在Nginx中拦截特定用户代理的教程

    在Nginx中拦截特定用户代理的教程

    这篇文章主要介绍了在Nginx中拦截特定用户代理的教程,并为这些被拦截的用户设置一个黑名单以方便管理,需要的朋友可以参考下
    2015-06-06
  • Nginx限制IP并发数与下载速度的方法

    Nginx限制IP并发数与下载速度的方法

    这篇文章主要介绍了Nginx中限制IP并发数与下载速度的方法,用到了limit_zone、limit_rate和limit_conn模块,有需要的朋友参考下
    2014-01-01
  • nginx 如何实现if嵌套的方法示例

    nginx 如何实现if嵌套的方法示例

    这篇文章主要介绍了nginx 如何实现if嵌套的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • 详解nginx进程锁的实现

    详解nginx进程锁的实现

    nginx是多进程并发模型的应用,但为了网络请求的安全性,必须要使用到锁,那么这个进程锁如何实现呢
    2021-06-06
  • 如何配置nginx作为静态文件托管服务器

    如何配置nginx作为静态文件托管服务器

    这篇文章主要介绍了如何配置nginx作为静态文件托管服务器的相关资料,下载nginx在windows上是个压缩包,解压后,使用命令行输入nginx进行启动,感兴趣的朋友跟随小编一起看看吧
    2024-01-01
  • Mac M1 Nginx 配置多站点的实现

    Mac M1 Nginx 配置多站点的实现

    这篇文章主要介绍了Mac M1 Nginx 配置多站点的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论