使用 Apache 最常见的 HTTPS 设置,每个站点需要 1 个 IP 地址。Nginx 是否有同样的限制,或者单个 IP 地址是否可以为无限数量的 HTTPS 站点提供服务?
答案1
Nginx 可以使用以下方式重新编译信噪比允许这样做,但它也需要你的 OpenSSL 版本支持它(我相信是 0.8.9)。请参阅这里了解更多信息。
还值得注意的是,Apache 现在支持 SNI,它已经反向移植至 2.2.*。
您可能面临的问题是浏览器兼容性。上面的指南(nginx)说明了以下兼容性,但我自己还没有检查过:
* Opera 8.0;
* MSIE 7.0 (but only on Windows Vista or higher);
* Firefox 2.0 and other browsers using Mozilla Platform rv:1.8.1;
* Safari 3.2.1 (Windows version supports SNI on Vista or higher);
* and Chrome (Windows version supports SNI on Vista or higher, too).
答案2
该限制是在 SSL 级别,而不是服务器级别。全部网络服务器有这个。
答案3
这是原始 SSL 协议的一个限制。加密在客户端向服务器发送主机名之前立即开始。如果您的虚拟主机都共享同一个连接,服务器必须猜测要显示哪个证书,如果它选择了错误的证书,客户端就会发出无效证书警告。
话虽如此,但一段时间以来,已经有了一些解决方法。最糟糕的方法是为每个虚拟主机使用不同的端口,这样你就有这样的网站https://www.example.com:449/
。如果你所有的虚拟主机都是“something”.example.com 的形式,你就可以使用通配符*.example.com
证书。浏览器支持主题备用名称在证书中多年,但如果您这样做,则每当您想要更改备用名称列表时都必须获得新的证书。
最新的是“SNI”或服务器名称指示这使得支持该功能的客户端可以在服务器提供证书之前告诉服务器它想要哪个主机名。请注意,IE 不会不是在 Windows XP 上支持此功能。在服务器端,Nginx 支持当一切都编译正确时。(注意:本页还讨论了上述其他选项)
答案4
是的。SSL 是在 IP/端口级别。服务器与此无关。您可以使用相同的 IP,但使用与默认 443 不同的端口,但您的域名将看起来像