Debian 上 Nginx 日志报错很常见,排查思路基本是固定的。下面我按 “先看日志 → 再定位问题 → 再给解决方案” 的顺序给你一个实用排查指南。
/var/log/nginx/access.log
/var/log/nginx/error.log
tail -n 50 /var/log/nginx/error.log
或者实时查看:
tail -f /var/log/nginx/error.log
报错示例:
nginx: [emerg] unknown directive "server" in /etc/nginx/sites-enabled/default:10
排查:
sudo nginx -t
解决:
;{} 不匹配修改后:
sudo systemctl reload nginx
报错示例:
bind() to 0.0.0.0:80 failed (98: Address already in use)
排查:
sudo ss -lntp | grep 80
解决:
sudo systemctl stop apache2
sudo systemctl disable apache2
或改 Nginx 端口:
listen 8080;
报错示例:
2024/01/01 10:00:00 [error] 1234#1234: *1 directory index of "/var/www/html/" is forbidden
原因:
解决:
sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 755 /var/www/html
确认有 index 文件:
ls /var/www/html/index.html
报错示例:
connect() failed (111: Connection refused) while connecting to upstream
原因:
解决:
sudo systemctl status php8.2-fpm
sudo systemctl start php8.2-fpm
检查 Nginx 配置:
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
报错示例:
stat() "/var/www/xxx" failed (2: No such file or directory)
解决:
sudo mkdir -p /var/www/xxx
报错示例:
SSL_CTX_use_PrivateKey_file failed
排查:
nginx -t
解决:
nginx -t
systemctl status nginx
journalctl -u nginx -n 50
你可以直接把 error.log 的报错内容贴出来(不用贴整段,贴关键几行就行),比如:
2024/01/01 10:00:00 [error] 1234#1234: *1 ...
我可以 直接告诉你哪一行配置错了、怎么改 ✅