5

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

 2 years ago
source link: https://zhang.ge/5137.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
WEB应用

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

Jager · 9月8日 · 2018年nginx · nginx配置 · wordpress 4990次已读

好久没打理博客,突然收到CDN流量预警,发现平均每天40G流量消耗!what?就现在这个访问量,不存在的。看了下CDN日志发现有小人一直在请求博客页面,其中被请求最多的就是CCkiller防御工具那个文章地址。

呵呵,我就写一个简单的防御小工具,惹着你啦?实际上我用了CDN,也并没有安装这个工具,所以想试探、想测试效果的麻烦自己去安装使用,攻击我博客毫无意义,挂了又能怎么样?

废话就扯这么多,进入正题。

看日志的时候,我发现有大量请求到了博客其实并不存在的地址,但是返回码居然是200??这就不正常了,于是手工访问了一下一个不存在的页面,虽然WordPress在前台给我展示了一个404页面,但是浏览器显示返回码确实是200!!纳尼?

还以为WordPress更新后改了这个机制呢,把主题下的404.php加了一个强行的404返回码,发现没有任何效果。

最后发现,居然是自己以前把404页面静态化留下的坑!

原因很简单,当时经常有人攻击一些不存在的页面,也就是每次都是动态的404,服务器自然就容易高负载,因此做了一个静态化处理:

通过curl请求一个不存在的地址,触发404返回内容,然后保存在网站的某个目录下,比如xxxx下面:

curl -o /data/wwwroot/zhang.ge/xxxx/404.html https://zhang.ge/404/404

然后,在Nginx Vhost下新增404响应规则:

error_page 404=/xxxx/404.html;

重启Nginx之后,再访问不存在的博客页面的时候,Nginx就直接返回404.html的内容了,从而实现404页面的静态化。

但是,Nginx这里我写错了,导致每次返回404.html都是200返回码!!这样其实会误导搜索引擎的判断,以为页面是存在的。。。。大坑。

正确的Nginx配置方法应该是:

error_page 404 /xxxx/404.html;

也就是不用等号,而是用空格!修改后,重启Nginx,然后访问不存在的地址发现已经是404返回码了,问题解决!


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK