![Apache2 中每个 IP 有多个命名的虚拟主机](https://linux22.com/image/604264/Apache2%20%E4%B8%AD%E6%AF%8F%E4%B8%AA%20IP%20%E6%9C%89%E5%A4%9A%E4%B8%AA%E5%91%BD%E5%90%8D%E7%9A%84%E8%99%9A%E6%8B%9F%E4%B8%BB%E6%9C%BA.png)
我见过很多类似问题关于托管多个虚拟主机(每个 IP 一个),但找不到有关每个 IP 多个虚拟主机的虚拟主机。
简而言之,我有一台需要托管多个 SSL 证书的 Apache2 服务器。我在机器上有两个独立的 IP。我在 IP(a) 上有三个域名,在 IP(b) 上有一个带有多个子域名的域名,如下所示:
IP(a) - SSL(a)
- https:://domain1
- domain2
- domain3
IP(b) - SSL(b)
- https://sub1.domain4
- https://sub2.domain4
- https://sub3.domain4
由于我最近添加了IP(b)
,我的第一步是转换到该 IP。在、、条目domain4
的 vhost conf 文件中,我切换到。重新启动 Apache 后,出现以下错误:sub1
sub2
sub3.domain
<VirtualHost *:80>
<VirtualHost IP(b):80>
[警告] VirtualHost 173.230.156.48:80 与 VirtualHost 173.230.156.48:80 重叠,前者优先,也许您需要一个 NameVirtualHost 指令
NameVirtualHost
我的 apache.conf 中有以下条目:
NameVirtualHost *:80
NameVirtualHost *:443
有什么关于正确操作方法的提示吗?谢谢。
更新:
根据 Shane 的回答其他的,我已在配置中更改了以下内容,但现在在提供 IP(a):443 内容时遇到问题:
端口配置文件
Listen IP(a):80
Listen IP(b):80
<IfModule mod_ssl.c>
Listen IP(a):443
Listen IP(b):443
</IfModule>
虚拟配置文件
NameVirtualHost IP(a):80
NameVirtualHost IP(b):80
NameVirtualHost IP(a):443
NameVirtualHost IP(b):443
我希望在 IP(a) 上提供服务的所有非 SSL 站点现在都是:
<VirtualHost IP(a):80>
IP(a) 上的所有 SSL 站点现在:
<VirtualHost IP(a):443>
IP(b) 上的所有非 SSL 站点现在:
<VirtualHost IP(b):80>
IP(b) 上的所有 SSL 站点现在:
<VirtualHost IP(b):443>
IP(a):80、IP(b):80 和 IP(b):443 上的所有站点均已正确提供服务。IP(a):443 上没有提供任何服务,当启动 Apache 时,我收到以下警告:
[warn] _default_ VirtualHost overlap on port 443, the first has precedence
我已修改我的default
文件来响应 IP(a):
<VirtualHost IP(a):80>
并修改了我的default-ssl
文件以响应IP(a):
<VirtualHost IP(a):443>
上述内容有什么明显错误吗?我尝试过用多种不同的方法更改设置,但似乎总是会出现上述警告。
答案1
您的NameVirtualHost
指令必须与您的定义完全匹配<VirtualHost>
。
因此如果你有:
<VirtualHost 192.0.2.1:80>
ServerName domain1
</VirtualHost>
<VirtualHost 192.0.2.1:80>
ServerName domain2
</VirtualHost>
...则不NameVirtualHost *:80
适用,您需要使用NameVirtualHost 192.0.2.1:80
。
答案2
你可能想查看这些链接:
http://de.wikipedia.org/wiki/服务器名称指示作为解释
和
http://wiki.apache.org/httpd/NameBasedSSLVHostsWithSNI
关于如何配置。
希望这可以帮助。