Nginx错误日志常见问题及解决方法
导读:Nginx 错误日志常见问题与排查要点 一 快速定位与通用排查 查看错误日志与访问日志:默认路径通常为**/var/log/nginx/error.log与/var/log/nginx/access.log**,结合请求时间、客户端 IP...
Nginx 错误日志常见问题与排查要点
一 快速定位与通用排查
- 查看错误日志与访问日志:默认路径通常为**/var/log/nginx/error.log与/var/log/nginx/access.log**,结合请求时间、客户端 IP、请求行与返回状态定位问题。
- 验证配置与热重载:执行nginx -t检查语法,使用nginx -s reload使配置生效。
- 检查上游与网络:确认后端(如PHP-FPM/Node.js/Tomcat)是否运行,端口是否监听,使用netstat -tulpn | grep :端口与telnet 127.0.0.1 端口测试连通性,排查防火墙策略。
- 权限与安全策略:核对静态资源与目录权限(如chmod 644/755、chown www-data:www-data),必要时检查SELinux/AppArmor是否拦截访问。
- 资源与异常:关注磁盘空间(df -h)、并发连接/文件描述符等资源瓶颈,避免由资源耗尽引发 5xx。
- 深入调试:必要时临时开启debug级别日志(性能影响大,排查后关闭),或使用strace跟踪 Nginx worker 的系统调用以定位文件/网络问题。
二 常见错误模式与修复建议
| 错误日志关键词 | 含义与常见场景 | 快速修复建议 |
|---|---|---|
| connect() failed (111: Connection refused) while connecting to upstream | 上游未启动、端口未监听、服务崩溃或防火墙拒绝 | 启动上游;确认监听端口与进程;检查防火墙/安全组;用 telnet/netstat 验证连通性 |
| upstream timed out (110: Connection timed out) | 上游处理慢或卡死,Nginx 读/连超时 | 优化上游性能;适当增大proxy_connect_timeout / proxy_read_timeout / proxy_send_timeout |
| no live upstreams while connecting to upstream | 所有上游被判定不可用(如并发失败触发快速摘除) | 调整max_fails/fail_timeout;排查上游稳定性与健康检查;必要时增加更多后端 |
| upstream prematurely closed connection while reading response header from upstream | 上游提前关闭连接(常见于后端主动关闭或异常) | 检查上游应用日志与异常退出;确认协议与连接复用配置一致 |
| recv() failed (104: Connection reset by peer) | 对端重置连接(进程崩溃、超时、网络异常) | 排查上游崩溃/重启;抓包与后端日志联动分析;优化超时与重试 |
| Permission denied while reading upstream / open() … failed (13: Permission denied) | 文件/目录/进程权限不足或SELinux/AppArmor拦截 | 修正文件权限与属主;检查进程运行用户;必要时调整 SELinux 上下文或策略 |
| client intended to send too large body / 413 Request Entity Too Large | 请求体超过client_max_body_size | 增大client_max_body_size(如 10M);若使用 PHP,需同步调整post_max_size / upload_max_filesize |
| upstream sent invalid header / no valid HTTP/1.0 header | 上游返回非法或不符合 HTTP 的响应头 | 修正上游响应格式;在代理上启用proxy_http_version 1.1并完善头部转发 |
| SSL_do_handshake() failed / SSL_write() failed | HTTPS 配置或证书问题、SSL 库/模块缺失 | 确认编译时启用SSL 模块且证书链完整;检查listen 443 ssl与证书路径 |
| bind() to [::]:80 failed (98: Address already in use) | IPv4 与 IPv6 监听冲突或未设置ipv6only=on | 将 IPv6 监听改为listen [::]:80 ipv6only=on 或仅保留一种监听 |
| rewrite or internal redirection cycle | 重写规则导致无限重定向 | 增加break/last或修正目标路径,避免循环 |
| worker process exited on signal 11 (core dumped) | 段错误或第三方模块异常 | 使用gdb分析 core 文件;临时禁用可疑模块并升级修复 |
三 配置示例与关键参数
- 反向代理与超时优化
location /api/ {
proxy_pass http://127.0.0.1:3000/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 15s;
proxy_read_timeout 60s;
proxy_send_timeout 60s;
}
- 客户端请求体限制(上传)
http {
client_max_body_size 10m;
}
# 若后端为 PHP,需同步:
# post_max_size = 10M
# upload_max_filesize = 10M(或按业务分拆)
- 静态资源与 SPA 路由回退
location / {
root /var/www/html;
index index.html;
try_files $uri $uri/ /index.html;
# SPA 前端路由支持
}
- 日志级别与路径(排查时临时开启 debug)
error_log /var/log/nginx/error.log warn;
# 生产建议 warn/error;排查可临时 debug
access_log /var/log/nginx/access.log main;
- 监听冲突修复(IPv6)
listen 80;
listen [::]:80 ipv6only=on;
- 上游健康检查与摘除参数(示例)
upstream backend {
server 10.0.0.11:8080 max_fails=3 fail_timeout=30s;
server 10.0.0.12:8080 max_fails=3 fail_timeout=30s;
}
以上示例覆盖了超时、上传大小、代理协议、路由回退、日志与监听冲突等高频场景,可直接按需裁剪到你的 server 配置中。
四 高频场景的排查清单
- 502/504 类(上游不可达或超时)
- 确认上游服务状态与端口监听;测试telnet/netstat连通性;排查防火墙/安全组。
- 增大proxy_connect_timeout / read_timeout / send_timeout;优化上游性能与慢查询。
- 检查max_fails/fail_timeout与重试策略,避免误摘除;必要时扩容后端或引入健康检查。
- 403/404 类(权限或路径错误)
- 核对root/index/try_files是否指向正确目录与文件;检查大小写与软链。
- 修正目录/文件权限与属主;排查SELinux/AppArmor策略。
- SPA 前端路由需配置try_files $uri $uri/ /index.html。
- 413/414 类(请求体或 URI 过长)
- 增大client_max_body_size;若上传大文件,建议分片或调整业务限制。
- 500 类(服务器内部错误)
- 查看 Nginx 与后端应用日志;检查磁盘空间、并发/文件描述符等资源。
- 校验配置语法与rewrite规则;修复脚本/应用错误后重载服务。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Nginx错误日志常见问题及解决方法
本文地址: https://pptw.com/jishu/770964.html
