Tag: 502BadGateway

  • 502 Bad Gateway 错误详解及解决方法

    502 Bad Gateway 错误详解及解决方法

    1. 什么是 502 Bad Gateway 报错

    502 Bad Gateway 是一种 HTTP 状态码,表示服务器作为网关或代理时,试图访问下一个服务器,但该服务器返回了非法的响应。简单来说,502 是一种错误类型代码,表示“错误的网关”。

    图片[1]-361Sale WordPress Care

    2. 产生 502 错误的原因

    502 错误通常由以下几个原因引起:

    第一个原因:DNS 缓存

    如果你在未开启 VPN 的情况下访问了某些受限网站(如 Facebook),会在本地留下缓存,导致访问失败。这种情况下可以尝试在 DOS 窗口运行 ipconfig /flushdns 命令来刷新 DNS 缓存。

    第二个原因:浏览器代理设置

    检查浏览器是否开启了代理设置,确认关闭代理。

    第三个原因:DNS 劫持

    即使使用国外的 DNS,也可能会被劫持。有些设备开 VPN 可以访问,有些设备却不能。这种情况下可以切换到另外的 DNS 服务器(如 Google DNS 或 OpenDNS)。

    图片[2]-361Sale WordPress Care

    3. 502 错误的 HTTP 循环

    502 错误发生在客户端(如 Web 浏览器)与 Web 服务器之间的通信过程中,具体如下:

    1. 获取网站 IP 地址:通过 DNS 将域名转换为 IP 地址。
    2. 打开 IP 套接字连接到该 IP 地址。
    3. 通过套接字写入 HTTP 数据流。
    4. 从 Web 服务器收到 HTTP 响应数据流,其中包含状态码。

    当客户端在最后一步收到状态码 502 时,就会显示“502 Bad Gateway”错误

    4. 固定 502 错误的方法

    通用解决方法

    1. 刷新网页:按 CTRL+F5 强制刷新网页,这会重新从服务器获取数据,而不是从本地缓存读取。
    2. 清除浏览器缓存:清除浏览器的缓存文件,然后重新访问网页。
    图片[3]-361Sale WordPress Care

    具体解决方案

    客户端问题

    1. 检查 ISP 问题:如果所有网站都出现 502 错误,可能是你的 ISP 设备故障或过载。
    2. 检查内部网络问题:如果只有部分网站出现 502 错误,可能是这些网站的设备故障或超载,联系网站管理员解决。

    服务器问题

    1. 查看 Nginx 日志:检查 Nginx 日志文件(/var/log/nginx)中是否有错误信息,如 upstream sent too big header while reading response header from upstream。可能是缓冲区设置过小。
    2. 增加缓冲区大小
    http {
        fastcgi_buffers 8 16k;
        fastcgi_buffer_size 32k;
    }

    3.代理缓冲区设置

    server {
        listen 80;
        server_name *.example.com;
    
        location / {
            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;
        }
    }

    4.增加 PHP-FPM 进程数

    ; php-fpm.conf
    pm.max_children = 512
    pm.max_requests = 600

    5.增加 PHP 执行时间

    ; php.ini
    max_execution_time = 300

    6.增加 Nginx 超时时间

    http {
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
    }

    5. Nginx 502 Bad Gateway 错误的原因及解决方法

    Nginx 502 错误的原因多种多样,通常是由于后端服务器的问题。以下是一些常见原因及解决方法:

    FastCGI 缓冲区设置过小

    在 Nginx 日志中发现 upstream sent too big header 错误,可以通过增加缓冲区大小解决:

    http {
        fastcgi_buffers 8 16k;
        fastcgi_buffer_size 32k;
    }
    

    代理缓冲区设置过小

    使用反向代理时,header 过大可能导致 502 错误:

    server {
        listen 80;
        server_name *.example.com;
    
        location / {
            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;
        }
    }

    PHP-FPM 进程数过少

    修改 php-fpm.conf 文件增加进程数:

    pm.max_children = 512
    pm.max_requests = 600

    PHP 执行超时

    修改 php.ini 文件增加执行时间:

    max_execution_time = 300

    Nginx 等待时间超时

    增加 Nginx 配置中的超时时间:

    http {
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
    }

    其他解决方法

    • 检查 PHP-FPM 进程数是否够用:
    netstat -anpo | grep "php-cgi" | wc -l

    检查 request_terminate_timeout 设置:

    ; php-fpm.conf
    request_terminate_timeout = 0

    通过上述方法,可以有效解决大部分 502 Bad Gateway 错误问题。希望这篇文章能帮助你更好地理解和解决 502 错误,提高网站的稳定性和用户体验。

    图片[4]-361Sale WordPress Care