Nginx常见报错及解决方案对照表:系统梳理Nginx运行中高频报错(如403/404/502等状态码异常、端口占用、SSL证书错误、后端超时等),涵盖错误现象、根本原因及分步解决方案,帮助运维人员快速定位问题。表格内容基于实际运维场景,包含权限配置、日志分析、服务状态检查等关键排查步骤,并提供如权限修复、超时参数调整、防火墙规则优化等针对性解决策略,适用于Web服务部署、负载均衡及反向代理等典型应用环境,是Nginx故障排查的实用速查指南。
错误代码/日志提示 | 可能原因 | 排查步骤 | 解决方案 |
---|---|---|---|
403 Forbidden | 1. 文件/目录权限不足 2. Nginx配置中 deny all 限制3. SELinux/AppArmor拦截 |
1. 检查文件权限:ls -l /path/to/file 2. 检查Nginx配置中的 allow/deny 规则3. 查看SELinux日志: sudo ausearch -m avc -ts recent |
1. 修改权限:sudo chown -R nginx:nginx /var/www/html 2. 调整配置:删除或修改 deny all 规则3. 临时禁用SELinux: sudo setenforce 0 |
404 Not Found | 1. 请求路径错误 2. 文件不存在 3. 反向代理目标服务未响应 |
1. 检查请求URL路径是否拼写正确 2. 确认文件是否存在于 root 指定目录3. 检查反向代理配置的 proxy_pass 地址是否可达 |
1. 修正URL路径 2. 将文件放置到正确目录 3. 检查代理目标服务状态: curl -I http://backend-server |
502 Bad Gateway | 1. 后端服务(如PHP-FPM、Node.js)崩溃或未启动 2. 代理超时 |
1. 检查后端服务状态:systemctl status php-fpm 2. 查看Nginx错误日志: tail -f /var/log/nginx/error.log |
1. 重启后端服务:sudo systemctl restart php-fpm 2. 调整超时时间:在Nginx配置中增加 proxy_connect_timeout 60s; |
504 Gateway Timeout | 1. 后端服务响应超时 2. Nginx代理超时设置过短 |
1. 检查后端服务性能(如数据库查询慢) 2. 查看Nginx超时配置参数 |
1. 优化后端服务性能(如添加数据库索引) 2. 调整Nginx配置: proxy_read_timeout 300s; fastcgi_read_timeout 300s; |
nginx: [emerg] bind() to 0.0.0.0:80 failed (98: Address already in use) | 1. 端口80被其他进程占用(如Apache) 2. Nginx重复启动 |
1. 检查端口占用:sudo netstat -tulnp | grep ':80' 2. 查找冲突进程PID: sudo lsof -i :80 |
1. 停止冲突服务:sudo systemctl stop apache2 2. 终止占用进程: sudo kill -9 <PID> 3. 重启Nginx: sudo systemctl restart nginx |
nginx: [error] open() "/var/log/nginx/access.log" failed (2: No such file or directory) | 1. 日志目录不存在 2. Nginx用户(如 www-data )无权限写入日志目录 |
1. 检查日志路径是否存在:ls -ld /var/log/nginx 2. 检查目录权限: ls -l /var/log/nginx |
1. 创建日志目录:sudo mkdir -p /var/log/nginx 2. 修改权限: sudo chown -R www-data:www-data /var/log/nginx 3. 重启Nginx |
SSL_ERROR_SYSCALL (OpenSSL相关错误) | 1. SSL证书路径错误 2. 证书文件权限不足 3. OpenSSL库版本不兼容 |
1. 检查Nginx配置中的ssl_certificate 和ssl_certificate_key 路径2. 确认证书文件权限: ls -l /etc/nginx/ssl/ |
1. 修正证书路径:ssl_certificate /etc/nginx/ssl/cert.pem; 2. 修改权限: sudo chmod 600 /etc/nginx/ssl/* 3. 更新OpenSSL: sudo apt upgrade openssl |
upstream timed out (110: Connection timed out) | 1. 反向代理后端服务未响应 2. 网络延迟或防火墙拦截 |
1. 检查后端服务是否可达:curl -I http://backend-ip:port 2. 检查防火墙规则: sudo iptables -L |
1. 修复后端服务网络配置 2. 调整Nginx超时参数: proxy_connect_timeout 30s; proxy_send_timeout 60s; proxy_read_timeout 120s; |
nginx: [warn] the "user" directive makes sense only if the master process runs with super-user privileges | 1. Nginx以非root用户启动但配置中指定了user 指令2. 配置文件语法错误 |
1. 检查启动命令:ps aux | grep nginx 2. 验证配置文件语法: sudo nginx -t |
1. 以root用户启动Nginx:sudo systemctl start nginx 2. 修复配置文件语法错误后重载: sudo nginx -s reload |
这里还有几个Nginx常用的快速恢复命令:
# 1. 停止Nginx
sudo systemctl stop nginx
# 2. 测试配置文件
sudo nginx -t
# 3. 重启Nginx
sudo systemctl start nginx
# 4. 查看状态
sudo systemctl status nginx
本文出处:老蒋部落 » Nginx常见报错及解决方案对照表 | 欢迎分享( 公众号:老蒋朋友圈 )