分析 Nginx 错误日志以排查“连接被拒绝”问题

学习解读 Nginx 错误日志的最佳实践,以精准定位“连接被拒绝”(connection refused)问题的根源,涵盖套接字设置和上游服务器检查。

在管理 Web 服务器时,最令人沮丧的问题之一就是遇到 502 Bad Gateway504 Gateway Timeout 错误,而这些错误往往伴随着 connect() failed (111: Connection refused) 的日志记录。

什么是“连接被拒绝”?

当 Nginx 尝试连接到上游服务器(如 PHP-FPM、Node.js 或 Python 应用)但无法建立 TCP 连接时,就会发生此错误。这通常意味着:

  1. 服务未运行:目标进程已崩溃或尚未启动。
  2. 端口不匹配:Nginx 配置的端口与应用监听的端口不一致。
  3. 防火墙限制:系统防火墙阻止了本地连接。

如何排查

1. 检查错误日志

首先,查看 Nginx 的错误日志(通常位于 /var/log/nginx/error.log):

tail -f /var/log/nginx/error.log

寻找类似以下的条目: connect() failed (111: Connection refused) while connecting to upstream

2. 验证上游服务状态

使用 netstatss 命令检查服务是否正在监听预期的端口:

sudo ss -tulpn | grep :<端口号>

如果没有任何输出,说明服务没有启动。

3. 检查 Nginx 配置

确保 upstream 块中的地址和端口正确无误:

upstream backend {
    server 127.0.0.1:8080;
}

总结

通过系统地检查服务状态和 Nginx 配置,您可以快速解决大多数“连接被拒绝”的问题。始终保持日志监控,以便在问题发生时第一时间获取线索。