解决网站404页面返回200状态码问题

解决网站404页面返回200状态码问题

💡 原文中文,约900字,阅读约需3分钟。
📝

内容提要

博客遭异常流量攻击后,作者发现不存在的页面返回200状态码。原因是此前为减轻动态404负载而将404页面静态化,但Nginx配置误用等号,导致返回200。改为空格并重启Nginx后,不存在页面正确返回404,问题解决。

🔎

延伸解读

静态化404页面的初衷与隐患

作者将404页面静态化,是为了应对大量针对不存在页面的攻击请求,避免每次动态生成404页面导致服务器高负载。但这一做法需要正确配置Nginx的error_page指令,否则可能引入状态码错误。静态化本身不是问题,关键在于配置细节。

等号与空格:一个符号引发的状态码错误

Nginx配置中,error_page 404=/xxxx/404.html 与 error_page 404 /xxxx/404.html 看似相似,但等号写法会导致返回200状态码。作者误用等号后,所有不存在的页面都返回200,可能误导搜索引擎认为页面有效,影响SEO。修正为空格后问题解决。

对搜索引擎的潜在影响

文章指出,404页面返回200状态码会误导搜索引擎,使其以为页面存在。这可能导致搜索引擎继续抓取无效页面,浪费爬虫资源,甚至影响网站整体质量评估。正确返回404有助于搜索引擎及时清理无效索引。

❓

Q&A

网站不存在的页面返回200状态码是什么原因造成的?

原因是之前为了减轻动态404请求的服务器负载,将404页面静态化,但在Nginx配置中错误地使用了等号(error_page 404=/xxxx/404.html;),导致返回静态404页面时状态码变成了200。

如何正确配置Nginx让404页面返回404状态码?

正确的Nginx配置是使用空格而不是等号:error_page 404 /xxxx/404.html; 修改后重启Nginx即可。

为什么要把404页面静态化?

因为经常有人攻击不存在的页面,导致每次请求都是动态的404,服务器容易高负载,所以通过curl请求一个不存在的地址触发404返回内容,然后保存为静态HTML文件,并在Nginx中配置error_page指向该文件,从而减轻服务器压力。

404页面返回200状态码会有什么负面影响?

会误导搜索引擎的判断,让搜索引擎以为页面是存在的,从而可能影响网站的SEO。

如何实现404页面的静态化?

通过curl请求一个不存在的地址(如curl -o /data/wwwroot/zhang.ge/xxxx/404.html /404/404),触发404返回内容并保存为静态文件,然后在Nginx配置中使用error_page指令指向该静态文件。

修改Nginx配置后需要做什么才能使更改生效?

修改配置后需要重启Nginx,然后访问不存在的地址验证是否返回404状态码。

🏷️

标签

➡️

继续阅读