Nginx 日志报错排查一般按**“看日志 → 定位模块 → 对照常见错误 → 验证修复”**的思路来。下面给你一套实用排查方法,从入门到常见坑都覆盖。
Nginx 通常有两个核心日志:
# 访问日志(谁访问了,状态码)
access.log
# 错误日志(重点看这个)
error.log
常见路径:
/var/log/nginx/error.log
/var/log/nginx/access.log
如果你不确定路径:
nginx -T | grep log
默认是 error,排错时可以临时改成 debug:
error_log /var/log/nginx/error.log debug;
改完:
nginx -t
nginx -s reload
⚠️ 生产环境 debug 日志量很大,排完记得改回 error 或 warn
现象
nginx: [emerg] unknown directive "xxx"
nginx: [emerg] unexpected "}"
排查
nginx -t
✅ 先看第几行,再检查:
;proxy_pass 写在 server 外)现象
bind() to 0.0.0.0:80 failed (98: Address already in use)
排查
ss -lntp | grep 80
# 或
lsof -i:80
解决
现象
Permission denied
failed to open error log file
常见原因
排查
ps aux | grep nginx
ls -l /var/log/nginx
解决
chown -R nginx:nginx /var/log/nginx
chmod 755 /var/log/nginx
SELinux:
setsebool -P httpd_can_network_connect 1
现象
connect() failed (111: Connection refused)
upstream timed out
排查顺序
curl 127.0.0.1:端口
proxy_pass http://127.0.0.1:8080;
proxy_read_timeout 60s;
iptables -L
firewall-cmd --list-all
现象
open() "/var/www/html/xxx" failed (2: No such file or directory)
排查
location / {
root /var/www/html;
index index.html;
}
现象
worker_connections are not enough
too many open files
解决
worker_rlimit_nofile 65535;
events {
worker_connections 10240;
}
系统层:
ulimit -n
nginx -ttail -n 50 /var/log/nginx/error.log
tail -n 20 /var/log/nginx/access.log
你可以直接把 error.log 报错内容 或 nginx.conf 相关配置 贴出来,我可以:
你可以贴日志,我帮你逐行分析。