我的目标是在多个 IP 地址上拥有多个 SSL 站点,但我正在为 Apache 设置而苦苦挣扎:
// I want this:
http + https example.com
http + https example.net
// On these IPs:
http example.com 1.1.1.1:80
http example.net 1.1.1.1:80
https example.com 2.2.2.2:443
https example.net 3.3.3.3:443
请注意,所有 4 个站点的 DocumentRoot 都不同。
在我当前的 Apache 设置中,当客户端访问https://example.com时,Apache 提供 1.1.1.1(连接被拒绝,假设:443)而不是 2.2.2.2:443。https://example.net(而不是 3.3.3.3:443)也是如此。我认为这是因为我的 DNS 记录@
并www
指向 1.1.1.1。非 SSL 1.1.1.1 基于名称的虚拟主机工作正常。
我不确定这是否是Apache 的行为。所以我的问题的核心是, “这是预期的 Apache 行为吗?如果是这样,有人可以给我一个例子,说明在这种情况下 IP 应该如何看待?http 和 https example.com 应该都在一个 IP 上而不是我分裂他们就这样起来?”
我的 httpd.conf 现在是这样的:
# http example.com and http example.net:
Listen 1.1.1.1:80
# https example.com:
Listen 2.2.2.2:443
# https example.net:
Listen 3.3.3.3:443
NameVirtualHost *:80
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/example.com
</VirtualHost>
<VirtualHost *:80>
ServerName example.net
DocumentRoot /var/www/example.net
</VirtualHost>
<VirtualHost 2.2.2.2:443>
SSLEngine on
ServerName example.com
DocumentRoot /var/www/example.com-ssl
</VirtualHost>
<VirtualHost 3.3.3.3:443>
SSLEngine on
ServerName example.net
DocumentRoot /var/www/example.net-ssl
</VirtualHost>
编辑:我所做的每一次谷歌搜索都会返回大量的SNI 指南(一个 IP 上的多个 SSL 虚拟主机,这不是我想要的。
您似乎误解了 DNS 的工作原理。
在这种情况下,DNS 将名称解析为
example.com
IP 地址,例如203.0.113.1
. 您不能为不同的端口或服务使用不同的 IP 地址。因此,您需要为 HTTP、HTTPS 和可能使用该域名提供的所有其他服务使用相同的 IP 地址。
我认为问题在于
NameVirtualHost
指令。您想使用基于 IP 的虚拟主机,而不是基于名称的虚拟主机。