Skip to content

故障排查

Nginx 故障排查概述

Nginx 作为反向代理和负载均衡器,经常会遇到 502 Bad Gateway、504 Gateway Timeout 等错误。这些问题通常是由于后端服务不可用、网络问题或超时设置导致。正确分析错误日志、监控性能,可以有效提升服务器稳定性和排查效率。

常见错误日志分析

Nginx 日志文件是排查问题的第一步。通常有两类日志:

  • 访问日志(Access Log):记录所有客户端请求的信息。
  • 错误日志(Error Log):记录服务器运行时发生的错误及警告。

日志文件位置

Nginx 的默认日志文件位置通常在 /var/log/nginx/ 目录下。

  • 访问日志:/var/log/nginx/access.log
  • 错误日志:/var/log/nginx/error.log

分析错误日志

Nginx 错误日志级别包括 debuginfonoticewarnerrorcrit,可以在 Nginx 配置文件中设置:

nginx
error_log /var/log/nginx/error.log warn;

常见的日志格式:

bash
2024/09/13 12:34:56 [error] 12345#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.1.1, server: example.com, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:9000/", host: "example.com"
  • Connection refused:后端服务没有启动或端口错误。
  • upstream timed out:后端服务响应超时,可能需要增加超时时间。

如何排查 502 Bad Gateway、504 Gateway Timeout 等错误

502 Bad Gateway

502 Bad Gateway 通常发生在 Nginx 代理到上游服务器时,上游服务器拒绝连接或没有响应。常见原因及排查方法:

  1. 后端服务没有启动:

    • 检查后端服务是否在运行,如 PHP-FPM、Node.js、Gunicorn 等。
    • 使用命令 ps aux | grep php-fpmsystemctl status php-fpm 检查服务状态。
  2. 端口配置错误:

    • 确保 Nginx 中的 proxy_passfastcgi_pass 指向正确的 IP 和端口。
    • 查看错误日志是否有 Connection refusedconnect() failed 信息。
  3. 后端服务崩溃或负载过高:

    • 检查后端服务的 CPU 和内存使用情况,是否有进程崩溃。
    • 使用 tophtop 工具查看资源使用情况。
  4. 解决方法:

    • 重启后端服务。
    • 确认端口和 IP 地址配置正确。
    • 增加后端服务器资源或优化代码性能。

504 Gateway Timeout

504 Gateway Timeout 错误通常是后端服务响应超时导致的。排查方法:

  1. 后端服务响应慢:

    • 检查后端服务是否处理请求过慢,可能需要优化代码或数据库查询。
  2. Nginx 超时设置不合理:

    • Nginx 的超时设置可能过短,导致请求未完成时已超时。常见的超时配置:
    nginx
    proxy_connect_timeout 60s;
    proxy_send_timeout 60s;
    proxy_read_timeout 60s;
    fastcgi_send_timeout 60s;
    fastcgi_read_timeout 60s;

    增加这些超时时间,可以避免 504 错误。

  3. 网络问题:

    • 后端服务和 Nginx 之间的网络连接是否稳定。可以通过 pingtelnet 检查网络连接。

Nginx 性能监控工具

为了及时发现问题和优化性能,Nginx 支持多种性能监控工具。这些工具可以帮助你监控请求处理时间、CPU 使用率、内存使用等关键指标。

Nginx 自带的状态监控模块

Nginx 自带一个简单的状态监控模块 ngx_http_stub_status_module,可以查看当前的连接数和请求数。

启用 stub_status 模块

首先在 Nginx 配置文件中启用状态页面:

nginx
server {
    listen 8080;
    server_name localhost;

    location /nginx_status {
        stub_status on;
        allow 127.0.0.1;  # 仅允许本地访问
        deny all;
    }
}

查看 Nginx 状态

访问 http://localhost:8080/nginx_status,会显示如下内容:

Active connections: 291 
server accepts handled requests
 12345 12345 12345 
Reading: 10 Writing: 20 Waiting: 50
  • Active connections:当前活跃连接数。
  • Reading:读取客户端请求头的连接数。
  • Writing:返回响应给客户端的连接数。
  • Waiting:保持在 keep-alive 状态的空闲连接数。

第三方监控工具

  1. Prometheus + Grafana

    • Prometheus 可以通过 nginx_exporter 采集 Nginx 的监控数据,并通过 Grafana 实现图表展示。
    • 配置步骤包括安装 nginx-vts-exporter 插件,并将其集成到 Prometheus 监控中。
  2. Datadog

    • Datadog 是一款强大的监控和分析工具,支持对 Nginx 的详细监控。它提供请求延迟、请求数、错误数等多种指标的监控。
  3. New Relic

    • New Relic 提供了针对 Nginx 的插件,可以监控流量、响应时间、错误率等。

系统资源监控

除了 Nginx 专用监控工具,还可以使用以下工具监控系统资源,以确保服务器的性能:

  1. htop:监控 CPU、内存、进程等信息。
  2. netstat:查看当前网络连接状态,排查连接数过多的问题。
  3. iostat:监控磁盘 I/O 性能,排查硬盘瓶颈。

总结

  • 常见错误日志分析:通过 Nginx 的错误日志可以快速定位 502、504 等问题的根源。
  • 排查 502、504 错误:从后端服务、端口配置、超时设置等方面进行排查,确保连接正常、响应及时。
  • 性能监控工具:通过 Nginx 自带的状态模块和第三方工具(如 Prometheus、Grafana、Datadog)进行实时性能监控,优化服务器资源使用。

使用这些方法可以有效解决 Nginx 在生产环境中的常见问题,保证其高效稳定运行。

编程洪同学服务平台是一个广泛收集编程相关内容和资源,旨在满足编程爱好者和专业开发人员的需求的网站。无论您是初学者还是经验丰富的开发者,都可以在这里找到有用的信息和资料,我们将助您提升编程技能和知识。
专业开发
高端定制
售后无忧
站内资源均为本站制作或收集于互联网等平台,如有侵权,请第一时间联系本站,敬请谅解!本站资源仅限于学习与参考,严禁用于各种非法活动,否则后果自行负责,本站概不承担!