![我可以在某些域名上使用 https,但不是在我的所有网站上都使用 https 吗?](https://linux22.com/image/774091/%E6%88%91%E5%8F%AF%E4%BB%A5%E5%9C%A8%E6%9F%90%E4%BA%9B%E5%9F%9F%E5%90%8D%E4%B8%8A%E4%BD%BF%E7%94%A8%20https%EF%BC%8C%E4%BD%86%E4%B8%8D%E6%98%AF%E5%9C%A8%E6%88%91%E7%9A%84%E6%89%80%E6%9C%89%E7%BD%91%E7%AB%99%E4%B8%8A%E9%83%BD%E4%BD%BF%E7%94%A8%20https%20%E5%90%97%EF%BC%9F.png)
我有两个网站(家庭服务器和 linode VPS),一个网站上有一个域名的子域名,另一个网站上也有一些子域名。我在两个服务器上还有两个或三个其他域名。我目前在两个网站上都使用 Apache VirtualHost。它们目前都没有使用 https。
是否可以一次开始推出一个子域的 https,还是全部推出或全部不推出?我是否需要使用像 nginx 这样的前端,或者我可以在 Apache 中完成所有操作?
答案1
为了在 Apache 中支持 SSL,您需要VirtualHost
为每个站点配置一个端口 443,这样您就可以一次对一个子域进行配置。请参阅Apache TLS/SSL 操作方法
答案2
您可以“一次开始滚动一个子域”。但是,如果您为所有虚拟域都设置了一个 IP,则无法限制 HTTPS 端口 443 只对部分虚拟域开放。
基于名称的虚拟主机根据 Host HTTP 标头为不同的网站提供服务。现在您有了 HTTP,当您在浏览器中输入“example.com”时,它会连接到您的 IP 并Host: example.com
在请求标头中添加。这样,Web 服务器就会匹配已知的虚拟主机,或者如果未知则将其作为默认虚拟主机处理(例如,如果您直接在浏览器中输入 IP)。
现在对于 HTTPS 部分,情况有些不同。因为必须在发送 HTTP 标头之前建立 TLS 安全连接。因此,Web 服务器实际上无法知道要提供哪个证书。无论是 example1.com 还是 example2.com(例如)。在过去,这意味着每个 IP 只允许一个有效的 HTTPS 网站(好吧,多域证书可以工作,但我不记得有任何 CA 允许这样做)。即没有虚拟主机。但幸运的是TLS SNI扩展的工作方式与 HTTP 类似。不同之处在于,TLS 会话信息中传递的是域名,而不是 HTTP 标头。
现在考虑这一点,一旦您为一个网站启用 SSL example1.com
,并为其生成证书,如果您输入https://example2.com
它实际上会打开example1.com
网站(因为它是 HTTPS 侦听器的唯一虚拟主机),但浏览器也会抱怨该网站提供了错误域名的证书(因为您的网络服务器没有 example2.com 的证书和它的虚拟主机)。
为了避免这种混淆,我建议您首先测试并准备好网站的所有证书和配置。然后一次性启用它们。至少如果您将它们全部托管在同一个 IP 上。如果它们有不同的 IP,我假设您明白您可以根据上述陈述分别启用 HTTP。