我的知识记录

如何解决Nginx中的404 Not Found错误?伪静态、路径、权限、CDN全排查

Nginx 404 Not Found是网站常见错误,原因多样从伪静态到路径权限都可能导致。完整排查方案。

404的本质。Nginx找不到请求对应的文件或处理规则返回404。分两种Nginx层面404(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。

原因七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最常见原因优先检查。

如何解决Nginx中的404 Not Found错误?伪静态、路径、权限、CDN全排查

标签:

更新时间:2026-08-26 17:48:57

上一篇:一台服务器可以建设几个网站_配置估算_资源监控_超售风险

下一篇:PbootCMS后台管理界面布局错乱解决办法_CSS加载失败与路径错误排查