转载请注明出处,如有问题请联系我们! Nginx 伪静态常见错误解决:404、500、路由失效怎么处理
Nginx 伪静态常见错误解决:404、500、路由失效怎么处理 这篇文章专门解决源码网站上线后最常见的问题:首页能打开,分类页或文章页 404;后台能打开但登录报 500;改了伪静态后整个网站无法访问。
一、先区分 404 和 500
404 通常表示路由或文件没找到,500 通常表示 PHP 程序执行报错。两者排查方向不同。
| 状态码 | 常见原因 | 排查方向 |
|---|---|---|
| 404 | 伪静态、root 路径、路由规则 | 检查 try_files 和访问路径 |
| 500 | PHP 报错、权限、数据库连接 | 查看 PHP 和 Nginx 日志 |
二、用 curl 查看真实状态
curl -I https://example.com
curl -I https://example.com/article/1.html
curl -I https://example.com/admin/login/index.html
浏览器有时候会受缓存影响,curl 更直接。
三、常见伪静态写法
很多 PHP CMS 需要把不存在的路径交给 index.php 处理:
location / {
try_files $uri $uri/ /index.php/$uri$is_args$args;
}
如果是 Laravel,则常见写法是:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
不同系统规则不一样,不能乱套。
四、检查 PHP-FPM socket
很多 500 是因为 Nginx 指向了错误的 PHP socket。例如服务器跑的是 PHP7.4,但配置写成 PHP8.1。
ls /run/php/
systemctl status php7.4-fpm
systemctl status php8.1-fpm
Nginx 里应该写实际存在的 socket:
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
五、检查 root 指向
root 必须指向包含 index.php 的目录。可以这样检查:
nginx -T | grep -A20 "server_name example.com"
find /var/www/example -maxdepth 2 -name index.php
如果 root 指向上一层目录,静态资源可能能打开,但动态路由会失效。
六、查看错误日志
tail -n 80 /var/log/nginx/error.log
tail -n 80 /var/log/php7.4-fpm.log
不要只看浏览器提示。日志里通常会明确告诉你是文件不存在、权限不足,还是 PHP 语法错误。
七、改完后的验证流程
nginx -t
systemctl reload nginx
systemctl restart php7.4-fpm
curl -I https://example.com
八、总结
Nginx 伪静态问题不能靠猜。正确顺序是:先看状态码,再查 root,再查 try_files,再查 PHP-FPM,最后看日志。这样才能快速定位 404、500 和路由失效。
