系统管理不是我的强项。我的情况是,我们有 1 个网站,有 4 个域名。网站本身根据使用的域名提供不同的模板/内容,模拟 4 个不同的网站。
我们希望每个域名都有 SSL(我们目前已使用 apache 正确设置了 SSL,并且它正在 3 个站点上运行)。
我们有 3 个物理网络接口:eth5、eth6、eth7。一位前员工编写了这些 IP 路由规则来帮助设置我们的虚拟主机 IP 地址。我不太明白这些规则是怎么回事,只是有了这些规则,我们的 3 个域就可以正常使用 SSL,每个 IP 地址对应一个虚拟主机 *.95
Eth5
ip route add *.*.*.0/24 dev eth5 proto kernel scope link src *.*.*.95 table 20
ip route add default via *.*.*.1 dev eth5 table 20
ip rule add from *.*.*.95 lookup 20
Eth6
ip route add *.*.*.0/24 dev eth6 proto kernel scope link src *.*.*.12 table 40
ip route add default via *.*.*.1 dev eth6 table 40
ip rule add from *.*.*.12 lookup 40
Eth7
ip route add *.*.*.0/24 dev eth7 proto kernel scope link src *.*.*.11 table 30
ip route add default via *.*.*.1 dev eth7 table 30
ip rule add from *.*.*.11 lookup 30
这些规则适用于我们需要 SSL 的 4 个网站中的 3 个。我们有另一个 IP 地址 *.14,我们已告知我们的内部 (bind9) 和 godaddy DNS(与 *.14 的公共 IP 即 *.70 相关联)指向此处。但我觉得我需要添加另一条规则。
我想知道这些规则的作用是什么,为什么我需要规则,以及如何让 .14 真正发挥作用。
我想要指向 14 的域名指向 12(在我们的内部网站上)。从外部来看,它指向 70,也就是 14,所以什么都没有显示出来,因为那部分不起作用!
编辑回答 Florenz 的评论:
我们的服务器运行的是 Ubuntu 12.10。我们的 apache 使用一个名为 sites-available 的文件夹和另一个 sites-enabled 的文件夹来处理我们的虚拟主机。我已将这部分全部正常工作,其中有四个可用且已启用的站点,其中包含虚拟主机。
在这些中,我们<virtualhost>
包含与 .95、.11、.12 和不起作用的 .14 相对应的 IP 地址,因为它们使用 SSL,所以它们使用端口:443
所有 SSL 证书都在运行,并且也链接到那里。我不认为虚拟主机的 apache 端没有正确完成。我认为这与这些 IP 路由规则有关。我对这些东西不太了解,所以很难解释。
答案1
所以我想到了解决这个问题的方法。
有两种方法可以修复它,一种方法是我在这里问的方法 - 创建一个新接口来反映 IP xxx14。
之前,我定义了一个新的虚拟主机,用于在剩余的域上运行 SSL。问题是,仅使用我们的一个 IP 定义虚拟主机是不够的。我们需要将该 IP 与我们的其中一个接口关联起来。鉴于我不熟悉编写接口或创建虚拟接口 - 而且我们已经有复杂的接口 - 这对我来说不是一条容易的路(没有双关语的意思)。
我修复这个问题的方法是让两个虚拟主机运行在同一个 IP 地址和端口上 - 其中一个 IP 地址已经与工作接口相关。我所需要做的就是添加 NameVirtualhost 指令,这样重叠就不会导致 Apache 发出警告。对此有一个很好的描述这里。
上面提供的参考示例说明了这个想法,我已对其进行了调整以适合我的情况:
NameVirtualHost x.x.x.12:433
<VirtualHost x.x.x.12:433>
ServerName www.domain.tld
ServerAlias domain.tld *.domain.tld
DocumentRoot /www/domain
</VirtualHost>
<VirtualHost x.x.x.12:433>
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain
</VirtualHost>
我们使用 apache 的 sites-available 和 sites-enabled,因此每个虚拟主机都在其各自的文件中定义。我只在其中一个文件中包含了 NameVirtualhost 指令,它就起作用了。
结论:我只是使用了已经有工作接口的相同 IP 地址,以避免弄清楚如何创建新接口的麻烦。