防止默认服务器的最佳方法?


26

我有许多虚拟主机,我想通过空白页,错误页面或通常最有效地使用Nginx资源的方式来“关闭”默认虚拟主机,同时仅允许通过以下方式访问其他虚拟主机:预定义的域。

Answers:


42

定义一个default_server返回HTTP 444代码:

server {
    listen      80 default_server;
    server_name _;
    return      444;
}

(返回4xx错误代码意味着客户端可以将请求解释为不成功的请求,而不是HTTP 200空白页,但完全可以信任我。)


2
444是非标准的nginx专用代码:“返回了特殊的nginx的非标准代码444,它关闭了连接”
bzeaman

2
这不适用于https。一个简单的监听443 default_server也不起作用,因为ssl握手首先发生,并且nginx将在返回444之前出错。我尚未尝试但应该起作用的一种解决方案是为默认https服务器创建一个自签名证书,然后重定向到http以避免任何浏览器错误。
西蒙·本格森

nginx的门票提供了一个很好的方式来拒绝SSL连接是在这里。他们还提供了解决方法,设置ssl_ciphers aNULL;
nh2

请注意我提到将打破非SNI能力HTTPS客户端(如nginx的自己的解决办法proxy_pass,除非你设置proxy_ssl_server_name on;)到达任何其他server_names(所以基本上打破了合法的server_nameS代表端口443,你想让通过)。有关详细信息,请参见trac.nginx.org/nginx/ticket/195#comment:11
nh2

4

只需定义默认虚拟主机,它将指向带有空白index.html文件的目录。

server {
    listen       80 default_server;
    server_name  _ ;
    root /var/www/placeholder ; 
    index index.html;
}

并将空白索引放在/ var / www / placeholder中


它将捕获所有未命中任何域名的请求,并以空白页显示响应。
wojciechz 2012年

你不能只是return '';代替root...index吗?
oriadam '16

0

为什么不拒绝所有

server {
    listen       80 default_server;
    server_name  _;

    location / {
        deny    all;
    }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.