模式切换
故障排查
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 错误日志级别包括 debug
、info
、notice
、warn
、error
和 crit
,可以在 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 代理到上游服务器时,上游服务器拒绝连接或没有响应。常见原因及排查方法:
后端服务没有启动:
- 检查后端服务是否在运行,如 PHP-FPM、Node.js、Gunicorn 等。
- 使用命令
ps aux | grep php-fpm
或systemctl status php-fpm
检查服务状态。
端口配置错误:
- 确保 Nginx 中的
proxy_pass
或fastcgi_pass
指向正确的 IP 和端口。 - 查看错误日志是否有
Connection refused
或connect() failed
信息。
- 确保 Nginx 中的
后端服务崩溃或负载过高:
- 检查后端服务的 CPU 和内存使用情况,是否有进程崩溃。
- 使用
top
或htop
工具查看资源使用情况。
解决方法:
- 重启后端服务。
- 确认端口和 IP 地址配置正确。
- 增加后端服务器资源或优化代码性能。
504 Gateway Timeout
504 Gateway Timeout 错误通常是后端服务响应超时导致的。排查方法:
后端服务响应慢:
- 检查后端服务是否处理请求过慢,可能需要优化代码或数据库查询。
Nginx 超时设置不合理:
- Nginx 的超时设置可能过短,导致请求未完成时已超时。常见的超时配置:
nginxproxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; fastcgi_send_timeout 60s; fastcgi_read_timeout 60s;
增加这些超时时间,可以避免 504 错误。
网络问题:
- 后端服务和 Nginx 之间的网络连接是否稳定。可以通过
ping
或telnet
检查网络连接。
- 后端服务和 Nginx 之间的网络连接是否稳定。可以通过
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 状态的空闲连接数。
第三方监控工具
Prometheus + Grafana
- Prometheus 可以通过
nginx_exporter
采集 Nginx 的监控数据,并通过 Grafana 实现图表展示。 - 配置步骤包括安装
nginx-vts-exporter
插件,并将其集成到 Prometheus 监控中。
- Prometheus 可以通过
Datadog
- Datadog 是一款强大的监控和分析工具,支持对 Nginx 的详细监控。它提供请求延迟、请求数、错误数等多种指标的监控。
New Relic
- New Relic 提供了针对 Nginx 的插件,可以监控流量、响应时间、错误率等。
系统资源监控
除了 Nginx 专用监控工具,还可以使用以下工具监控系统资源,以确保服务器的性能:
- htop:监控 CPU、内存、进程等信息。
- netstat:查看当前网络连接状态,排查连接数过多的问题。
- iostat:监控磁盘 I/O 性能,排查硬盘瓶颈。
总结
- 常见错误日志分析:通过 Nginx 的错误日志可以快速定位 502、504 等问题的根源。
- 排查 502、504 错误:从后端服务、端口配置、超时设置等方面进行排查,确保连接正常、响应及时。
- 性能监控工具:通过 Nginx 自带的状态模块和第三方工具(如 Prometheus、Grafana、Datadog)进行实时性能监控,优化服务器资源使用。
使用这些方法可以有效解决 Nginx 在生产环境中的常见问题,保证其高效稳定运行。