温馨提示×

nginx日志报错怎么排查

小樊
42
2026-09-20 21:53:31
栏目: 编程语言

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 日志量很大,排完记得改回 errorwarn


三、常见错误 & 排查方式

1️⃣ 配置文件错误

现象

nginx: [emerg] unknown directive "xxx"
nginx: [emerg] unexpected "}"

排查

nginx -t

✅ 先看第几行,再检查:

  • 少分号 ;
  • 括号不匹配
  • 指令写错位置(如 proxy_pass 写在 server 外)

2️⃣ 端口被占用

现象

bind() to 0.0.0.0:80 failed (98: Address already in use)

排查

ss -lntp | grep 80
# 或
lsof -i:80

解决

  • 停掉占用程序
  • 或改 Nginx 端口

3️⃣ 权限问题(非常常见)

现象

Permission denied
failed to open error log file

常见原因

  • Nginx 用户(www / nginx)无目录权限
  • SELinux 限制(CentOS)

排查

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

4️⃣ 反向代理 / 502 / 504

现象

connect() failed (111: Connection refused)
upstream timed out

排查顺序

  1. 后端服务是否启动
curl 127.0.0.1:端口
  1. Nginx 配置
proxy_pass http://127.0.0.1:8080;
proxy_read_timeout 60s;
  1. 防火墙
iptables -L
firewall-cmd --list-all

5️⃣ 404 / 静态资源找不到

现象

open() "/var/www/html/xxx" failed (2: No such file or directory)

排查

  • root / alias 是否写错
  • 路径是否真实存在
  • index 文件是否配置
location / {
    root /var/www/html;
    index index.html;
}

6️⃣ 太多连接 / 性能问题

现象

worker_connections are not enough
too many open files

解决

worker_rlimit_nofile 65535;
events {
    worker_connections 10240;
}

系统层:

ulimit -n

四、排错通用套路(非常重要)

  1. nginx -t
  2. 看 error.log 最后 50 行
tail -n 50 /var/log/nginx/error.log
  1. 最小化复现
  • 注释掉无关配置
  • 只留一个 location
  1. 对照访问日志状态码
tail -n 20 /var/log/nginx/access.log

五、如果你愿意,我可以直接帮你看

你可以直接把 error.log 报错内容nginx.conf 相关配置 贴出来,我可以:

  • 精准判断是哪一类问题
  • 给你最小修改方案
  • 告诉你是不是生产环境高风险操作

你可以贴日志,我帮你逐行分析。

0