Nginx TLS-SNI:对HTTPS使用主机名相关的SSL

Nginx TLS-SNI:对HTTPS使用主机名相关的SSL,nginx,Nginx,我需要使用两个不同的ssl证书,nginx指向同一个应用程序 指向1.1.1.1的要点 指向1.1.1.1的要点 . . . . 指向1.1.1.1的要点 尝试了以下操作: server { listen 80; server_name domain1.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name domain1.com; root /app/di

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

指向1.1.1.1的要点 指向1.1.1.1的要点 . . . . 指向1.1.1.1的要点

尝试了以下操作:

server {
listen 80;
server_name domain1.com;
return 301 https://$host$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://$host$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;

    }

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

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

有出路吗?

谢谢你指出了正确的东西

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

更多关于SNI的信息可以阅读

继续讨论配置

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;
    }
}
上面的配置将域1和域2的HTTP 80转发到各自的HTTPS 443服务器块,其中加载了各自的证书密钥对。 HTTPS443请求是直接处理的。 nginx通过使用SNI选择服务器名称来决定点击哪个块。

感谢您指出了正确的内容

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

更多关于SNI的信息可以阅读

继续讨论配置

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;
    }
}
上面的配置将域1和域2的HTTP 80转发到各自的HTTPS 443服务器块,其中加载了各自的证书密钥对。 HTTPS443请求是直接处理的。
nginx通过使用SNI选择服务器名称来决定点击哪个块。

您的服务器名称指令有一半是正确的,一半是错误的。https://位不是服务器名称的一部分。有关更多信息,请参阅。感谢指针,我已经更正了它。但在发布这篇文章之前,我用正确的名字试过了。它将只加载第一个块的SSL证书。我认为这是不可能的,因为主机名本身将被加密,并且需要正确的证书来解密它,这将再次需要主机名。因此,这是一个永无止境的循环式场景。悲哀的是,有些事情不能用软件来完成nginx实现SNI-see为请求的主机名提供正确的证书。如果正在使用第一个服务器块,则表示请求的主机名与server_name指令的值不完全匹配。使用nginx-T测试您的配置。感谢您的及时回复。这是完全匹配的,我刚刚将端口从443 ssl更改为80,并对ssl文件行进行了注释,它可以很好地加载http版本。我会再核实一下,然后再给你回复。另外,我正在使用let's encrypt wildcard certs。非常感谢!!!!TLS SNI已禁用。成功了!:软件确实允许你做任何事情。再高兴不过了。一半的服务器名称指令是正确的,一半是错误的。https://位不是服务器名称的一部分。有关更多信息,请参阅。感谢指针,我已经更正了它。但在发布这篇文章之前,我用正确的名字试过了。它将只加载第一个块的SSL证书。我认为这是不可能的,因为主机名本身将被加密,并且需要正确的证书来解密它,这将再次需要主机名。因此,这是一个永无止境的循环式场景。悲哀的是,有些事情不能用软件来完成nginx实现SNI-see为请求的主机名提供正确的证书。如果正在使用第一个服务器块,则表示请求的主机名与server_name指令的值不完全匹配。使用nginx-T测试您的配置。感谢您的及时回复。这是完全匹配的,我刚刚将端口从443 ssl更改为80,并对ssl文件行进行了注释,它可以很好地加载http版本。我会再核实一下,然后再给你回复。另外,我正在使用let's encrypt wildcard certs。非常感谢!!!!TLS SNI已禁用。成功了!:软件确实允许你做任何事情。再高兴不过了。