在 Debian 上用 Nginx 出现 404,通常不是 Nginx 本身坏了,而是请求没有匹配到正确的 location / 文件不存在。下面按「最常见 → 较少见」给你排查清单。
例如配置:
root /var/www/html;
index index.html;
但你访问:
http://ip/
而 /var/www/html/index.html 不存在
✅ 检查:
ls -l /var/www/html
典型错误:
location / {
# 没有 root
}
✅ 正确示例:
server {
listen 80;
server_name _;
root /var/www/html;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
改完重启:
sudo nginx -t
sudo systemctl reload nginx
比如:
location /api {
proxy_pass http://127.0.0.1:3000;
}
你访问 /api/ 或 /api/x 但后端没这个路由 → 404
✅ 检查:
Debian 默认只加载:
/etc/nginx/sites-enabled/
你写在了:
/etc/nginx/conf.d/xxx.conf
或
/etc/nginx/sites-available/xxx
但没软链
✅ 解决:
sudo ln -s /etc/nginx/sites-available/xxx /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Debian 自带:
/etc/nginx/sites-enabled/default
如果你自定义 server,但没删 default,可能匹配错。
✅ 建议:
sudo rm /etc/nginx/sites-enabled/default
Nginx 用户通常是 www-data
ps aux | grep nginx
确保:
chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html
# 看错误日志(最关键)
sudo tail -n 50 /var/log/nginx/error.log
# 看访问日志
sudo tail -n 20 /var/log/nginx/access.log
# 检查配置
sudo nginx -t
你可以贴出:
我可以直接告诉你是哪一行配置导致的 404。