| 错误代码/日志提示 | 可能原因 | 排查步骤 | 解决方案 |
|---|---|---|---|
| 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