两者都使用相同的虚拟主机,所以我只设置server_name两次。 问题是,我需要nginx为每个域名提供正确的ssl证书。
这是可能的一个虚拟主机,或者我需要设置两个虚拟主机?
编辑2014年11月 :最初的答案是不正确的,是不完整的; 它需要刷新! 这里是。
基本上有两种情况
– 您拥有通配符证书 (或多域证书)
在这种情况下,您可以使用多个侦听相同IP地址/ https端口的虚拟主机 ,并且这两个虚拟主机使用相同的证书(侦听所有接口),例如
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)在处理证书之前处理虚拟主机 。 除了每个虚拟主机有一个特定的证书, crt和密钥之外,配置与上面相同。
( nginx支持从0.9.8f开始的SNI,检查你的nginx服务器是否符合SNI )
( 也就是关于SNI和浏览器的支持 )
否则,如果您还想访问较旧的浏览器,则需要多个虚拟主机侦听不同的 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; ... }
原因在这里很好解释 。