Nginx使用HTTPS向default_server提供任何域名 - 如何阻止它?

时间:2014-11-16 04:16:58

标签: nginx

这是我的nginx配置的样子:

server {
    listen 443 default_server ssl;
    server_name dlgt.co;
    [... bunch of stuff there ...]

}

#HTTP Server redirects to https
server {
       server_name _;
       rewrite        ^ https://dlgt.co$request_uri? permanent;
}

server {
       listen 443;
       server_name _;
       rewrite        ^ https://dlgt.co$request_uri? permanent;
}

尽管如此,使用https://访问IP仍然有效。我试图阻止这种行为,因为它只是在抛出错误。我无法找到如何从配置中排除所有其他server_names,我认为我的最后2个块可以做到这一点,但显然没有。

谢谢!

1 个答案:

答案 0 :(得分:2)

您的上一个区块与您的第一个区块相冲突。定义默认服务器将使服务器块处理所有未知的服务器名称,即使您定义了另一个" catch-all"块。

因此逻辑必须与此相反:

server {
    listen 80 default_server;
    listen 443 default_server ssl;
    ssl_certificate /path/to/certificate;
    ssl_certificate_key /path/to/key;
    return 301 https://dlgt.co$request_uri;
}

server {
    listen 443;
    server_name dlgt.co;
    [ ... ]
}

请注意,只需在默认服务器块中设置证书和密钥。当握手在任何HTTP流量出现之前到来时,nginx将选择服务器块处理在默认服务器块中进行握手后的传入HTTP请求。