server { listen 80 default_server; server_name oschina.net www.oschina.net; ... }
先看看上面这段配置,listen 指令后面有一个参数 default_server ,这个参数是在 0.8.21 版本以后才有的,而之前是 default 指令(如果没有匹配到,都到这个默认里执行)。
Nginx 的虚拟主机是通过HTTP请求中的Host值来找到对应的虚拟主机配置,如果找不到呢?那 Nginx 就会将请求送到指定了 default_server 的 节点来处理,如果没有指定为 default_server 的话,就跑到 localhost 的节点,如果没有 localhost 的节点,那只好 404 了。
另外你也可以指定对于没有匹配的 Host 值时,返回错误到客户端,这在现在国内用来处理未备案域名指向自己时非常有用,看看下面的配置:
server { listen 80 default_server; server_name _; return 444; }
通过返回444这个Nginx的非标准错误码来让Nginx断开与浏览器之间的连接。
本文转自奔跑在路上博客51CTO博客,原文链接http://blog.51cto.com/qiangsh/1768124如需转载请自行联系原作者
qianghong000