如何解决Nginx中的404 Not Found错误?伪静态、路径、权限全排查
Nginx 404 Not Found是网站常见错误,原因多样,从伪静态到路径权限都可能导致。下面是完整排查方案。
404的本质。Nginx找不到请求对应的文件或处理规则,返回404状态码。分两种:Nginx层面的404(Nginx直接返回,页面是Nginx默认404)和应用层面的404(PHP/CMS返回,页面是网站自定义404)。看响应头Server和页面样式区分。
原因一,伪静态规则缺失或错误。CMS(PbootCMS、WordPress、织梦)的URL重写依赖Nginx伪静态规则,没配置或配置错,访问文章页404。PbootCMS伪静态: ```nginx location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; } } ``` WordPress伪静态: ```nginx location / { try_files $uri $uri/ /index.php?$args; } ``` 织梦伪静态(动态):不需要特殊规则,静态页直接访问html文件。检查:宝塔-网站-设置-伪静态,选对应CMS的规则,或手动粘贴。保存后nginx -t && nginx -s reload。
原因二,文件/目录确实不存在。访问的URL对应的文件在服务器上没有。检查:1. URL拼写错。2. 文件被删除或移动。3. 静态页没生成(织梦需要生成静态HTML,没生成访问404)。4. 图片/CSS/JS路径错,资源404。修复:确认文件存在,路径正确,织梦重新生成静态页。
原因三,root和index配置错。Nginx的root指向错误目录,或index没包含默认首页。检查:网站配置里root /www/wwwroot/域名;是否正确。index index.html index.htm index.php;是否包含index.php。修复:宝塔-网站-设置-网站目录,根目录选对,默认首页加index.php。
原因四,PHP未解析。PHP文件被当成静态文件下载或404,因为location ~ .php$配置缺失或fastcgi_pass错。检查:网站配置里有没有PHP处理块: ```nginx location ~ .php$ { fastcgi_pass unix:/tmp/php-cgi-74.sock; fastcgi_index index.php; include fastcgi.conf; } ``` 宝塔添加PHP版本后会自动配置,手动改坏了就404或下载文件。修复:宝塔-网站-设置-PHP版本,选对版本,自动生成配置。
原因五,大小写敏感。Linux文件名大小写敏感,URL里是About.html,文件是about.html,就404。Windows服务器不敏感但Linux敏感。修复:统一小写文件名,URL和文件名一致。
原因六,目录权限。Nginx用户(www)没有读取文件或进入目录的权限,返回403(不是404,但常被混淆)。检查:ls -l看权限,属主www,目录755,文件644。修复:chown -R www:www /www/wwwroot/域名 && chmod -R 755 /www/wwwroot/域名。
原因七,CDN缓存。CDN缓存了404状态,源站已修复但CDN还返回404。修复:CDN控制台刷新对应URL,或等缓存过期。
原因八,HTTPS/HTTP配置。80端口和443端口的server配置不一致,HTTPS访问404但HTTP正常。检查:443的server块里root、伪静态、PHP配置和80一致。修复:复制80的配置到443,宝塔默认会同步,但手动改了要检查。
原因九,子目录安装。网站装在子目录(域名/blog),伪静态规则要适配子目录。PbootCMS子目录伪静态: ```nginx location /blog/ { if (!-e $request_filename) { rewrite ^/blog/(.*)$ /blog/index.php?s=$1 last; } } ``` 修复:按子目录调整rewrite路径。
原因十,默认站点干扰。Nginx有默认站点(第一个server),域名没正确匹配到对应server,请求落到默认站点,默认站点没有对应文件返回404。检查:nginx -T看所有server,域名是否在某个server_name里。修复:确保域名在对应网站的server_name里,删除不用的默认站点。
诊断步骤。1. 看404页面样式:Nginx默认404(白底黑字)→Nginx层面问题;网站自定义404页→应用层面。2. 访问静态文件(域名/robots.txt):正常→PHP/伪静态问题;也404→root/权限/文件问题。3. 直接访问index.php:正常→伪静态问题;404→PHP配置或文件问题。4. 看Nginx错误日志:tail /www/wwwlogs/域名.error.log,有具体原因。5. 检查伪静态规则。6. 检查文件存在和权限。
自定义404页面。Nginx配置:error_page 404 /404.html; 或 fastcgi_intercept_errors on; error_page 404 /index.php?404=1;让CMS处理404。自定义404页提升用户体验,引导用户继续浏览。
SEO注意。1. 404页面返回404状态码,不要返回200(软404,百度会惩罚)。2. 404页加搜索框、热门文章、首页链接,降低跳出率。3. 死链提交百度站长平台,加快删除。4. 改版后旧URL做301到新URL,不要直接404。5. 定期用站长工具查死链,及时修复。
Nginx 404排查核心:先区分Nginx层面还是应用层面,再按"伪静态→文件存在→root配置→PHP解析→权限→大小写→CDN"顺序检查。伪静态是CMS站点404的最常见原因,优先检查。

更新时间:2026-08-26 17:57:13
上一篇:PbootCMS后台UEditor编辑器magnet ed2k链接自动加http_源码修改_协议白名单