【发布时间】:2018-10-30 06:35:06
【问题描述】:
我需要使用两个不同的 ssl 证书,同时 nginx 指向同一个应用程序。
https://domain1.com 指向 1.1.1.1
https://domain2.com 指向 1.1.1.1
.
.
.
.
https://domainN.com 指向 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 旋转两个不同的实例,因为情况需要帮助我解决指向相同 IP 的 n 域,最好使用一个 nginx 服务器。
有出路吗?
【问题讨论】:
-
你的
server_name指令一半是正确的,一半是错误的。https://位不是服务器名称的一部分。请参阅this document 了解更多信息。 -
感谢指点,我已更正。但在发布之前,我确实使用更正的名称进行了尝试。它只会加载第一个块的 SSL 证书。我认为这是不可能的,因为主机名本身将被加密,并且需要正确的证书来解密它,这将再次需要主机名。所以它是一个永无止境的循环,如场景。可悲的是,有些事情不能用软件来完成。 :(
-
nginx实现 SNI(请参阅 this link)为请求的主机名提供正确的证书。如果正在使用第一个server块 - 这意味着请求的主机名与server_name指令的值不匹配。使用nginx -T测试您的配置。 -
感谢您的及时回复。这是完全匹配的,我刚刚将端口从 443 ssl 更改为 80 并注释了 ssl 文件行,它可以很好地加载 http 版本。我会仔细检查并回复你。另外,我正在使用让我们加密通配符证书。
-
非常感谢!!!! TLS SNI 已禁用。有效! :) 软件确实允许您做任何事情。再开心不过了。
标签: nginx