排查 Nginx 返回的 404 Not Found,可以按下面系统化的思路来分析和定位问题。
通常位置:
/var/log/nginx/access.log
或
/var/log/nginx/<站点>/access.log
示例:
127.0.0.1 - - [10/Oct/2024:12:00:00 +0800] "GET /api/test HTTP/1.1" 404 153
重点关注:
/api/test404可以在 error log 中确认:
/var/log/nginx/error.log
location / {
root /var/www/html;
}
排查:
ls -l /var/www/html/xxx.html
注意:
root 是目录index 是否配置index index.html index.php;
例如:
location /api {
proxy_pass http://127.0.0.1:8080;
}
请求 /api/user
实际转发到:http://127.0.0.1:8080/api/user
如果你的后端只接受 /user:
location /api/ {
proxy_pass http://127.0.0.1:8080/;
}
⚠️ proxy_pass 末尾的 / 非常关键
location / {
try_files $uri $uri/ /index.php?$args;
}
如果:
排查:
try_files确认:
curl http://127.0.0.1:8080/xxx
如果后端本身就 404:
Nginx 无权访问文件:
open() "/var/www/html/test.html" failed (13: Permission denied)
解决:
chown -R nginx:nginx /var/www/html
chmod 755 /var/www/html
rewrite ^/old/(.*)$ /new/$1 last;
如果目标不存在,也会 404
可用:
rewrite_log on;
error_log /var/log/nginx/rewrite.log notice;
error_log /var/log/nginx/error.log debug;
然后:
nginx -t
nginx -s reload
可以看到:
/你可以贴出:
我可以帮你精准定位 ✅