如何告诉 nginx 只为一个 vhost 管理的域提供 https?

NiK*_*iKo 5 ssl nginx

我有一个运行 ubuntu 和 nginx 0.8.4 的 ec2 实例,vhosts 使用 http 服务几个不同的域,但一个使用 SSL/https。

安全域配置:

server {
    listen 443 ssl;
    server_name "securedomain.tld";

    ssl_certificate     /etc/nginx/certs/securedomain.tld.crt;
    ssl_certificate_key /etc/nginx/certs/securedomain.tld.key;

    if ($host != $server_name) {
        return 444; # this won't work because HTTPS communication has 
                    # been already started, warning message is displayed
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

不安全的域配置:

server {
    listen 80; 
    server_name "unsecuredomain.tld";

    // ...
}
Run Code Online (Sandbox Code Playgroud)

现在,使用 https 服务的域正在赶上所有托管域的所有https 流量……这意味着https://unsecuredomain.tld/将显示警告并实际提供来自securedomain.tld:(

问题是,有没有办法阻止 nginx 为所有使用 https 提供服务的不安全域提供服务?例如,通过指定您只想接受给定请求主机的 https 连接……

提示:一个 ec2 实例不能有多个 IP 受到影响。

wom*_*ble 4

简而言之:不。就 nginx 而言,您已经告诉它所有到端口 443 的连接都是该虚拟主机的 SSL 连接,并且它只是按照您的指示执行。当它可以看到Host:请求中的标头时,SSL 协商已经完成(没有 SNI,这实际上只有在您拥有所有域的证书并且被支持 SNI 的浏览器命中时才会有帮助) 。