Nginx 错误日志定位
1. 先理解这件事
如果访问日志回答的是“请求发生了什么”,那么错误日志回答的是:
- Nginx 自己在运行时遇到了什么问题
对新手来说,错误日志最重要的意义是:
- 服务起不来时先看它
- 配置不生效时先看它
- 反向代理报错时先看它
对有经验的读者,更值得关注的是:
- 错误等级是否设置合理
- 日志是否能区分启动错误、配置错误和运行时错误
- 如何从错误日志快速关联到访问日志和上游应用日志
2. 最小可用配置
error_log /var/log/nginx/error.log warn;
http {
server {
listen 80;
server_name example.com;
location /api/ {
proxy_pass http://127.0.0.1:3000;
}
}
}先记住:
error_log第一个参数是日志文件路径- 第二个参数是记录级别
常见级别从低到高包括:
debuginfonoticewarnerrorcritalertemerg
生产环境通常从 warn 或 error 起步,排障时再临时提高详细度。
3. 常见报错类型怎么读
3.1 配置类错误
例如:
- 配置文件语法错误
- 指令写在错误作用域
- 重复监听端口
这类问题通常在 nginx -t 时就能暴露。
3.2 文件与权限类错误
例如:
- 证书文件找不到
- 静态目录不存在
- 日志目录不可写
这类问题的关键词通常会出现:
No such file or directoryPermission denied
3.3 代理与上游类错误
例如:
connect() failedupstream timed outno live upstreams
这类错误通常表示:
- 上游服务没启动
- 网络不通
- 上游响应过慢
- 上游节点已经全部不可用
4. 一条实用的定位主线
新手可以先按这个顺序查:
- 先执行
nginx -t,确认不是配置语法问题。 - 再看
error.log里最新几行,抓最明确的报错关键词。 - 对照访问日志,确认请求是否真的到了 Nginx。
- 如果是代理问题,再去看上游服务日志和端口状态。
更进阶的做法是把问题分三层:
- Nginx 自身配置层
- Nginx 与上游的连接层
- 上游应用自身处理层
这样可以避免把所有问题都误判成“Nginx 配错了”。
5. 常见场景示例
5.1 502 Bad Gateway
优先排查:
proxy_pass地址是否正确- 上游服务是否在监听
- 容器或主机之间网络是否可达
5.2 403 Forbidden
优先排查:
- 文件目录权限
root或alias路径是否指对- 是否被安全规则拒绝
5.3 404 Not Found
优先排查:
location匹配是否符合预期try_files是否写对- 静态文件是否真的存在
6. 实践建议
- 配置变更前后都执行
nginx -t。 - 错误日志级别默认不要长期开到
debug。 - 排障时同时查看访问日志和错误日志,避免只看一边。
- 如果有反向代理链路,要同步对照上游应用日志。
7. 排查清单
- 已确认错误日志路径和级别
- 变更前后已执行
nginx -t - 已抓到最新错误关键词而不是只看状态码
- 已结合访问日志确认请求到达情况
- 已按“配置层 → 连接层 → 应用层”分层排查