Nginx TLS-SNI:使用主机名依赖SSL进行HTTPS

时间:2018-05-20 12:08:04

标签: nginx

我需要使用两个不同的ssl证书,nginx指向同一个应用程序。

https://domain1.com指向1.1.1.1
https://domain2.com指向1.1.1.1 。



https://domainN.com指向1.1.1.1

尝试以下方法:

deleteAllFromObject(Dog())

这不起作用,它只是加载第一个证书,当使用第二个域访问时导致无效证书。

域名证书无法合并。 我不能为nginx旋转两个不同的实例,因为案例需要帮助我指出n-Domains指向同一个IP,最好使用一个nginx服务器。

有出路吗?

1 个答案:

答案 0 :(得分:1)

感谢Richard Smith指出正确的东西!

因此,要设置nginx为指向同一nginx的域使用不同的证书密钥对,我们必须依赖TLS-SNI(服务器名称指示),其中域名作为未加密文本的一部分发送握手。这有助于nginx决定将哪个证书密钥对用于传入的安全请求。

有关SNI here的更多内容。

继续进行配置。

server {
listen 80;
server_name domain1.com;
return 301 https://$server_name$request_uri;
}



server {

    listen 443 ssl;
    server_name domain1.com;
    root /app/dist;
    index index.html;
    ssl_certificate /etc/nginx/ssl/d1/certificate.crt;
    ssl_certificate_key /etc/nginx/ssl/d1/private.key;

    location / {    
        try_files $uri $uri/ /index.html;
    }
}


server {
listen 80;
server_name domain2.com;
return 301 https://$server_name$request_uri;
}



server {

    listen 443 ssl;
    server_name domain2.com;
    root /app/dist;
    index index.html;
    ssl_certificate /etc/nginx/ssl/d2/certificate.crt;
    ssl_certificate_key /etc/nginx/ssl/d2/private.key;

    location / {    
        try_files $uri $uri/ /index.html;
    }
}

上面的配置将domain1和domain2的HTTP(80)转发到相应的HTTPS(443)服务器块,其中加载了相应的证书密钥对。
HTTPS(443)请求直接处理 nginx通过使用SNI选择服务器名称来决定要击中哪个块。