我很想使用nginx来服务一个网站,多个域名和SSL:
两个都使用相同的vhost,所以我只设置了两次server_name。问题是,我需要nginx为每个域名提供正确的ssl证书。使用一个vhost可以实现这一点吗?还是需要设置两个vhost?
rjee0c151#
2014年11月**:初始答案不正确且不完整;它需要翻新一下!在这里。基本上有两种情况
在这种情况下,您可以使用多个 * vhosts * 侦听同一IP地址/https端口,并且两个 * vhosts * 使用同一证书(侦听所有接口),例如
server { listen 443; server_name webmail.example.com; root /var/www/html/docs/sslexampledata; ssl on; ssl_certificate /var/www/ssl/samecertif.crt; ssl_certificate_key /var/www/ssl/samecertif.key; ... } server { listen 443; server_name webmail.beispiel.de; root /var/www/html/docs/sslbeispieldata; ssl on; ssl_certificate /var/www/ssl/samecertif.crt; ssl_certificate_key /var/www/ssl/samecertif.key; ... }
或者在您的特定情况下,让两个域使用相同的数据
server { listen 443; server_name webmail.example.com webmail.beispiel.de; # <== 2 domains root /var/www/html/docs/sslbeispieldata; ssl on; ssl_certificate /var/www/ssl/samecertif.crt; ssl_certificate_key /var/www/ssl/samecertif.key; ... }
上述情况(一个IP用于所有证书)仍然可以通过服务器名称指示在现代浏览器上工作。SNI让客户端(浏览器)在请求报头中发送它想要到达的主机,允许服务器(nginx)在必须处理证书之前处理 * vhosts 。配置与上面相同,除了每个 * vhost * 都有一个特定的证书, crt * 和 * key *。(nginx支持SNI从0.9.8f,检查您的nginx服务器是SNI兼容)(also, SF talks about SNI and browser support)否则,如果您还想访问较旧的浏览器,则需要多个 * vhost * 监听每个 * 不同 * 的IP地址/https端口,例如
server { listen 1.2.3.4:443; # <== IP 1.2.3.4 server_name webmail.example.com; root /var/www/html/docs/sslexampledata; ssl on; ssl_certificate /var/www/ssl/certifIP1example.crt; ssl_certificate_key /var/www/ssl/certifIP1example.key; ... } server { listen 101.102.103:443; <== different IP server_name webmail.beispiel.de; root /var/www/html/docs/sslbeispieldata; ssl on; ssl_certificate /var/www/ssl/certifIP2beispiel.crt; ssl_certificate_key /var/www/ssl/certifIP2beispiel.key; ... }
原因很好。
iklwldmw2#
使用TLS SNI:SNI允许浏览器在SSL握手期间传递请求的服务器名称检查Nginx是否启用TLS SNI
$ nginx -V ... TLS SNI support enabled ...
并在error_log中检查此警告是否不存在:nginx是使用SNI支持构建的,但是,现在它动态链接到一个OpenSSL库,该库没有tlsext支持,因此SNI不可用Nginx HTTPS documentation具有更多详细信息。如果启用了TLS SNI,则以下配置工作正常。x一个一个一个一个x一个一个二个一个x一个一个三个一个参考:Nginx TLS SNI如果Nginx禁用TLS SNI:Nginx将对所有请求使用默认的server证书。Nginx documentation:这是由SSL协议行为引起的。SSL连接是在浏览器发送HTTP请求之前建立的,而nginx不知道所请求服务器的名称。因此,它可能只提供默认服务器的证书。
error_log
server
2条答案
按热度按时间rjee0c151#
2014年11月**:初始答案不正确且不完整;它需要翻新一下!在这里。
基本上有两种情况
在这种情况下,您可以使用多个 * vhosts * 侦听同一IP地址/https端口,并且两个 * vhosts * 使用同一证书(侦听所有接口),例如
或者在您的特定情况下,让两个域使用相同的数据
上述情况(一个IP用于所有证书)仍然可以通过服务器名称指示在现代浏览器上工作。SNI让客户端(浏览器)在请求报头中发送它想要到达的主机,允许服务器(nginx)在必须处理证书之前处理 * vhosts 。配置与上面相同,除了每个 * vhost * 都有一个特定的证书, crt * 和 * key *。
(nginx支持SNI从0.9.8f,检查您的nginx服务器是SNI兼容)
(also, SF talks about SNI and browser support)
否则,如果您还想访问较旧的浏览器,则需要多个 * vhost * 监听每个 * 不同 * 的IP地址/https端口,例如
原因很好。
iklwldmw2#
使用TLS SNI:SNI允许浏览器在SSL握手期间传递请求的服务器名称
检查Nginx是否启用TLS SNI
并在
error_log
中检查此警告是否不存在:nginx是使用SNI支持构建的,但是,现在它动态链接到一个OpenSSL库,该库没有tlsext支持,因此SNI不可用
Nginx HTTPS documentation具有更多详细信息。
如果启用了TLS SNI,则以下配置工作正常。
x一个一个一个一个x一个一个二个一个x一个一个三个一个
参考:Nginx TLS SNI
如果Nginx禁用TLS SNI:Nginx将对所有请求使用默认的
server
证书。Nginx documentation:
这是由SSL协议行为引起的。SSL连接是在浏览器发送HTTP请求之前建立的,而nginx不知道所请求服务器的名称。因此,它可能只提供默认服务器的证书。