查看nginx错误日志是定位启动失败最有效方式,重点分析error.log中最新error级别报错;确认日志路径与权限,检查配置语法(nginx -t)、端口占用、文件路径、证书匹配及临时目录;error.log为空时查systemd日志或用strace追踪系统调用。

直接查看 Nginx 错误日志是定位启动失败原因最有效的方式,重点看 error.log 中 latest(或最近一次)的报错信息,通常包含明确的错误类型、文件路径和行号。
确认日志位置与权限
Nginx 默认错误日志路径为 /var/log/nginx/error.log,但实际位置需以配置文件中 error_log 指令为准。常见问题包括:
- 配置文件里写了自定义路径(如
error_log /data/logs/nginx/error.log error;),却未创建对应目录或赋予 nginx 用户(如 www-data、nginx)写入权限 - 日志文件被误删后,Nginx 启动时无法重建,导致静默失败(此时系统日志
/var/log/syslog或journalctl -u nginx可能有线索) - SELinux 或 AppArmor 启用时拦截了日志写入(CentOS/RHEL 系统需检查
ausearch -m avc -ts recent)
检查配置语法与加载过程
很多“启动失败”本质是配置校验不过,Nginx 进程根本没起来。务必执行:
-
nginx -t:验证配置语法及路径有效性。输出中若含test is successful才代表语法无硬错误 -
nginx -T:输出完整生效配置(含 include 文件内容),便于快速定位被 include 进来的异常配置段 - 注意
nginx -t成功 ≠ 能启动成功——比如listen 80端口被占用、ssl_certificate文件路径错误但证书本身未读取(仅在 SSL 握手时才报错,启动阶段不触发)
聚焦 error.log 中的典型错误模式
打开最新 error.log,按时间倒序查看,重点关注 ERROR 级别及以上条目。常见可直接定位的问题有:
-
bind() to 0.0.0.0:80 failed (98: Address already in use) → 端口冲突,用
ss -tulnp | grep :80查进程 - open() "/etc/nginx/conf.d/example.conf" failed (2: No such file or directory) → include 路径错误或文件名拼写错误
- SSL_CTX_use_PrivateKey_file("/etc/nginx/ssl/key.pem") failed (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch) → 私钥与证书不匹配
-
mkdir() "/var/lib/nginx/tmp/client_body" failed (2: No such file or directory) → 临时目录缺失,需手动创建并赋权(如
chown -R nginx:nginx /var/lib/nginx)
补充排查手段(当 error.log 无记录时)
如果 error.log 完全为空或只有旧日志,说明 Nginx 连日志模块都未初始化,应转向系统级日志:
- systemd 系统:运行
journalctl -u nginx -n 50 -e,查看 unit 启动全过程(含 exec 失败、权限拒绝等底层错误) - 检查 nginx 主进程是否真的未启动:
ps aux | grep nginx,若只有 master 进程没有 worker,则大概率卡在初始化阶段 - 用
strace -f -e trace=openat,stat,connect,bind nginx -t 2>&1 | grep -E "(No such|Permission|Address)"追踪系统调用失败点(适合深度调试)










