nginx – 用ssl-support设置多个server_name

我很乐意使用nginx来提供多个域名和SSL的网站:

  • webmail.example.com
  • webmail.beispiel.de

两者都使用相同的虚拟主机,所以我只设置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; ... } 

原因在这里很好解释 。