内容提要
博客遭异常流量攻击后,作者发现不存在的页面返回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状态码。