转载请注明出处,如有问题请联系我们! Nginx 伪静态常见错误解决:404、500、路由失效怎么处理

Nginx 伪静态常见错误解决:404、500、路由失效怎么处理 这篇文章专门解决源码网站上线后最常见的问题:首页能打开,分类页或文章页 404;后台能打开但登录报 500;改了伪静态后整个网站无法访问。

一、先区分 404 和 500

404 通常表示路由或文件没找到,500 通常表示 PHP 程序执行报错。两者排查方向不同。

状态码常见原因排查方向
404伪静态、root 路径、路由规则检查 try_files 和访问路径
500PHP 报错、权限、数据库连接查看 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 和路由失效。

标签云