换了VPS之后的某一天,在Google打点员东西节制台下看到了大量的"软404"错误,查找了一些资料之后发明是本身在Nginx下设置404页面的要领差池才导致了错误的发生,在此记录一下Nginx下正确的404页面设置要领。
404是一个相应代码,暗示"页面无法找到"(Page Not Found),Google关于"软404"给出的说法是:
序列号 | CPU | RAM | HDD | 带宽 | 售价(美元) | 免费试用 |
---|---|---|---|---|---|---|
香港服务器1 | E5-2620 | 32G | 1T HDD | 50M/无限流量 | $196.00 | 立即申请 |
香港服务器2 | E5-2650 | 32G | 1T HDD | 50M/无限流量 | $256.00 | 立即申请 |
香港服务器3 | E5-2680 | 32G | 1T HDD | 50M/无限流量 | $316.00 | 立即申请 |
香港服务器4 | E5-2690 | 32G | 1T HDD | 50M/无限流量 | $336.00 | 立即申请 |
香港服务器5 | E5-2697 | 32G | 1T HDD | 50M/无限流量 | $376.00 | 立即申请 |
香港服务器6 | E5-2620*2 | 32G | 1T HDD | 50M/无限流量 | $376.00 | 立即申请 |
香港服务器7 | E5-2650*2 | 32G | 1T HDD | 50M/无限流量 | $436.00 | 立即申请 |
香港服务器8 | E5-2680*2 | 32G | 1T HDD | 50M/无限流量 | $476.00 | 立即申请 |
香港服务器9 | E5-2690*2 | 32G | 1T HDD | 50M/无限流量 | $556.00 | 立即申请 |
香港服务器10 | E5-2697*2 | 32G | 1T HDD | 50M/无限流量 | $596.00 | 立即申请 |
香港服务器11 | E5-2680v4*2 | 32G | 1T HDD | 50M/无限流量 | $696.00 | 立即申请 |
香港服务器12 | E5-2698v4*2 | 32G | 1T HDD | 50M/无限流量 | $796.00 | 立即申请 |
Instead of returning a 404 response code for a non-existent URL, websites that serve "soft 404s" return a 200 response code.
就是说对付那些不存在的URL,处事器并没有返回404(Page Not Found)代码,而是返回了200(OK)代码,而这是不正常的。
之后在其它的搜索功效里我又看到了这样一段话
Soft 404s can occur as a result of configuration errors when an Error Document 404 is specified as an absolute path rather than a relative path.
看完之后名顿开,因为我的404自界说页面是有图片和CSS的,莫斯科服务器新加坡vps,而图片跟CSS都是以相对路径(eg. /xxx/xxx)写在页面里的,所觉得了能让整站都能看到404页面里的图片,我就把404页面在Nginx里界说成了绝对路径(eg. //www.slyar.com/xxx/xxx),由于页面被当成了外部页面,所以会返回200代码,由此发生了"软404"错误。
知道了错误,那就好办了。将404页面的路径界说为相对路径,至于图片和CSS,只要在页面里利用绝对路径即可。
Nginx下正确的404页面界说要领:
1、VIM编辑Nginx设置文件,用了vhosts的就单独改,没用的直接改nginx.conf
vim/usr/local/nginx/conf/nginx.conf
or
vim/usr/local/nginx/conf/vhosts/slyar.com.nginx.conf
2、以相对路径指定404页面
server{#error_page404//www.slyar.com/404.htmlerror_page404/404.html;}
3、:wq生存退出,从头加载Nginx
/usr/local/nginx/sbin/nginx-sreload
4、从头查抄一下不存在的页面,看是否返回404
curl-I//www.slyar.com/slyarHTTP/1.1404NotFoundServer:nginx/1.0.15Date:Mon,27Aug201208:13:56GMTContent-Type:text/htmlContent-Length:2110Connection:keep-alive
5.埋没Nginx堕落页面及Header上的版本号Nginx在堕落页面,譬喻403和404页上会默认显示Nginx的版本号,这长短常不安详的,黑客大概会通过你的Nginx版本号获知如何入侵你的处事器,因为特定版本的处事器措施大概会存在某些裂痕。
Nginx的版本号凡是会呈此刻2个处所:
1、HTTP Header,譬喻 Server:nginx/1.x.x 等信息会袒露Web处事器所用软件名称以及版本号
2、在403和404等堕落页面上,默认会显示 Nginx 1.x.x 等版本信息
埋没Nginx版本号很是简朴,官方已经给出了很是好的办理方案,操作server_tokens (Whether to send the Nginx version number in error pages and Server header)
打开设置文件Nginx.conf,然后在http一段中增加下面的参数
http{...其它设置server_tokensoff;}
之后 nginx -s reload 重载Nginx设置,如此就可以埋没掉Nginx的版本号了。可以利用curl自我测试。