返回

NGINX 504 网关超时故障的排查技巧

后端

前言

在实际工作中,我们经常会遇到各种各样的服务器故障。其中,NGINX 504 网关超时故障是一个比较常见的故障。本文将分享一个真实案例,详细介绍如何排查和解决 NGINX 504 网关超时故障。

故障现象

某天早上,我们收到用户反馈,说他们访问网站时遇到了 504 网关超时错误。我们立即对服务器进行检查,发现 NGINX 日志中出现了大量的 504 错误。

[error] 10.0.0.1 - - [27/Apr/2023:10:10:09 +0800] "GET /index.html HTTP/1.1" 504 184 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"
[error] 10.0.0.2 - - [27/Apr/2023:10:10:09 +0800] "GET /about.html HTTP/1.1" 504 184 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36"

故障排查

1. 检查 NGINX 配置文件

我们首先检查了 NGINX 配置文件,发现没有明显的错误。

server {
    listen 80;
    server_name www.example.com;

    location / {
        root /var/www/html;
        index index.html;
    }
}

2. 检查后端服务器

我们然后检查了后端服务器,发现后端服务器的负载很高,并且有大量的请求超时。

[root@web1 ~]# sar -u 1 10
Linux 5.10.0-1022-aws (web1.example.com)    04/27/2023  _x86_64_  (4 CPU)

10:10:01 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %gnice   %idle
10:10:02 AM  all    99.49    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.51
10:10:03 AM  all    99.46    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.54
10:10:04 AM  all    99.50    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.50
10:10:05 AM  all    99.49    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.51
10:10:06 AM  all    99.50    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.50

Average:    all    99.49    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.00    0.51

3. 调整 NGINX 配置

我们对 NGINX 配置文件进行了调整,增加了 proxy_connect_timeoutproxy_send_timeout 的值。

server {
    listen 80;
    server_name www.example.com;

    location / {
        root /var/www/html;
        index index.html;

        proxy_connect_timeout 300s;
        proxy_send_timeout 300s;
    }
}

4. 重新启动 NGINX

我们重新启动了 NGINX,故障消失。

总结

通过这次故障,我们吸取了以下几点经验:

  • 定期检查 NGINX 配置文件,确保没有明显的错误。
  • 定期检查后端服务器的负载情况,避免出现负载过高的情况。
  • 适当调整 NGINX 配置,优化 NGINX 的性能。