分析 Nginx 错误日志以排查“连接被拒绝”问题
学习解读 Nginx 错误日志的最佳实践,以精准定位“连接被拒绝”(connection refused)问题的根源,涵盖套接字设置和上游服务器检查。
在管理 Web 服务器时,最令人沮丧的问题之一就是遇到 502 Bad Gateway 或 504 Gateway Timeout 错误,而这些错误往往伴随着 connect() failed (111: Connection refused) 的日志记录。
什么是“连接被拒绝”?
当 Nginx 尝试连接到上游服务器(如 PHP-FPM、Node.js 或 Python 应用)但无法建立 TCP 连接时,就会发生此错误。这通常意味着:
- 服务未运行:目标进程已崩溃或尚未启动。
- 端口不匹配:Nginx 配置的端口与应用监听的端口不一致。
- 防火墙限制:系统防火墙阻止了本地连接。
如何排查
1. 检查错误日志
首先,查看 Nginx 的错误日志(通常位于 /var/log/nginx/error.log):
tail -f /var/log/nginx/error.log
寻找类似以下的条目:
connect() failed (111: Connection refused) while connecting to upstream
2. 验证上游服务状态
使用 netstat 或 ss 命令检查服务是否正在监听预期的端口:
sudo ss -tulpn | grep :<端口号>
如果没有任何输出,说明服务没有启动。
3. 检查 Nginx 配置
确保 upstream 块中的地址和端口正确无误:
upstream backend {
server 127.0.0.1:8080;
}
总结
通过系统地检查服务状态和 Nginx 配置,您可以快速解决大多数“连接被拒绝”的问题。始终保持日志监控,以便在问题发生时第一时间获取线索。