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.conf的基本配置实例详解

    Nginx配置文件nginx.conf的基本配置实例详解

    Nginx(engine x)是一个轻量级的高性能的HTTP和反向代理web服务器及电子邮件(IMAP/POP3)代理服务器,下面这篇文章主要给大家介绍了关于Nginx配置文件nginx.conf基本配置的相关资料,需要的朋友可以参考下
    2022-09-09
  • Nginx配置优化详解

    Nginx配置优化详解

    如果你已经安装过Nginx并在生产环境中使用,那么Nginx配置优化你一定也要做,这样才能看到Nginx性能,本文就从基本配置优化开始到高层配置教你如何优化Nginx
    2013-11-11
  • Nginx部署vue项目和配置代理的问题解析

    Nginx部署vue项目和配置代理的问题解析

    这篇文章主要介绍了Nginx部署vue项目和配置代理,需本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,要的朋友可以参考下
    2021-08-08
  • nginx实现动静分离的示例代码

    nginx实现动静分离的示例代码

    这篇文章主要介绍了nginx实现动静分离的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 一句简单命令重启nginx

    一句简单命令重启nginx

    最近我的多个VPS经常出现502错误,经常需要重启nginx,但网上的很多教程都需要繁琐的启动脚本,远不如apache的重启命令那么简单。
    2010-03-03
  • nginx代理后端路径获取IP为127.0.0.1问题

    nginx代理后端路径获取IP为127.0.0.1问题

    文章讨论了在使用Nginx作为反向代理时,如何正确配置以避免在前端路径A/api访问后端时丢失真实的IP地址,通过有效的Nginx配置,可以确保在前后端分离的场景中,客户端通过前端路径访问后端时,后端能够正确获取客户端的真实IP地址,示例配置展示了如何实现这一目标
    2025-02-02
  • Nginx层面配置基础用户验证的完整步骤

    Nginx层面配置基础用户验证的完整步骤

    这篇文章主要给大家介绍了关于Nginx层面配置基础用户验证的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Nginx具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-07-07
  • 如何修改Nginx版本名称伪装任意web server

    如何修改Nginx版本名称伪装任意web server

    这篇文章主要介绍了修改Nginx版本名称伪装任意web server的方法,非常不错,具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-08-08
  • 让Nginx支持shtml格式的配置方法

    让Nginx支持shtml格式的配置方法

    这篇文章主要介绍了让Nginx支持shtml格式的配置方法,shtml格式可以包含一些服务端指令,同PHP中的include功能类似,需要的朋友可以参考下
    2014-08-08
  • Nginx中location匹配以及rewrite重写跳转详解

    Nginx中location匹配以及rewrite重写跳转详解

    访问重写 rewrite 是 Nginx HTTP 请求处理过程中的一个重要功能,下面这篇文章主要给大家介绍了Nginx中location匹配以及rewrite重写跳转的相关资料,需要的朋友可以参考下
    2022-03-03

最新评论