看看官方的介绍。
In catch-all server examples the strange name “_” can be seen:
listen 80 default_server;
server_name _;
return 444;
}
There is nothing special about this name, it is just one of a myriad of invalid domain names which never intersect with any real name. Other invalid names like “--” and “!@#” may equally be used.
解释:
在这个server段实例可以看到:奇怪的server_name名字“ _ “
listen 80 default_server;
server_name _;
return 404;
}
这个名字仅仅是一个许多无效的域名中的一个代表,与任何真实的名字永远不会相交。其它无效的名称,如“ - “ 和” !@# “也可同样使用。
default_server:
nginx的虚拟主机是通过HTTP请求中的Host值来找到对应的虚拟主机配置,如果找不到,就会将请求送到指定了 default_server 的节点进行处理。
对于未绑定的域名指向服务器时,匹配不到配置的虚拟主机域名后,会默认使用这个虚拟主机,然后直接返回404。
把以上server段的配置代码,添加到nginx.conf中就可以使用了。
1. 在http{}段加入红色指令,如下
...
fastcgi_intercept_errors on;
error_page 404 /404.html;
...
}
2. 把404页面放到根目录(root指令定义的目录下),默认是安装目录的html目录下。
3.测试配置是否正确
4.重新载入配置
注:
自定义的404.html的内容必须大于512字节,否则ie下会显示默认404错误页面,不能显示自定义的404页面。
如果你的404内容小于512字节,可以再404.html的<html>标签后面加入一下内容,可以屏蔽浏览器默认错误提示。
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
<!-- a padding to disable MSIE and Chrome friendly error page -->
2012.12.19更新
1.2.5版本的nginx默认已经回针对不同的浏览器添加如上内容。
1.25版的error_page 404 /404.html;
注意:
必须放在server段,对所在虚拟主机的自定义404起作用,否则则使用默认的404页面。
漏洞版本:
nginx(Tested at 1.1.10)
漏洞描述:
在nginx中开启autoindex,配置不规范而造成目录遍历漏洞。
配置如下:
listen 80;
server_name ;
index index.htm index.html;
root /home/wwwroot/www;
access_log off;
location /paper {
alias /home/wwwroot/paper/;
autoindex on;
}
}
注意 这里/home/wwwroot/paper/; 有个/
当浏览http:///paper/,正常情况应该遍历/home/wwwroot/paper/这个目录,但如果访问http:///paper../则会遍历/home/wwwroot/这个目录。
安全建议:
使用如下配置
alias /home/wwwroot/paper;
或
location /paper/ {
alias /home/wwwroot/paper/;