具有域和 IP 的 Apache NameVirtualHost

具有域和 IP 的 Apache NameVirtualHost

我有几个 IP 正在尝试在 Apache2 中配置。我尝试搜索,但似乎我要求的太多了。

我想为每个 IP 路由每个直接请求(例如http://155.155.155.100) 到专用的 DocumentRoot(例如 /www/155.155.155.00/)。

而解析到相同 IP(155.155.155.100)的域将具有单独的 DocumentRoot。到目前为止,Apache 在路由 IP 方面没有问题,但它不喜欢在域之间共享它们。

我目前的设置(不起作用,IP 和域名都路由到 /www/155.155.155.101 - 它们不是分开的):

NameVirtualHost 155.155.155.100
NameVirtualHost 155.155.155.101
NameVirtualHost 155.155.155.102
NameVirtualHost 155.155.155.103

<VirtualHost 155.155.155.101>
DocumentRoot /www/155.155.155.101
</VirtualHost>

<VirtualHost 155.155.155.101>
ServerName www.domain1.com
ServerAlias www.domain1.com
DocumentRoot /www/domain1.com
</VirtualHost>

我将非常感激您的帮助!

答案1

未经测试。我假设您的每个主机名都位于单个 IP 上;如果不是,您可以改用单个 IP NameVirtualHost *,然后在<VirtualHost *>所有地方进行匹配。

NameVirtualHost 155.155.155.100:80
NameVirtualHost 155.155.155.101:80
NameVirtualHost 155.155.155.102:80
NameVirtualHost 155.155.155.103:80

<VirtualHost 155.155.155.100:80>
ServerName 155.155.155.100
DocumentRoot /www/155.155.155.100
</VirtualHost>

<VirtualHost 155.155.155.100:80>
ServerName www.domain0.com
DocumentRoot /www/domain0.com
</VirtualHost>

<VirtualHost 155.155.155.101:80>
ServerName 155.155.155.101
DocumentRoot /www/155.155.155.101
</VirtualHost>

<VirtualHost 155.155.155.101:80>
ServerName www.domain1.com
DocumentRoot /www/domain1.com
</VirtualHost>

据我所知,您的错误是没有为第一个虚拟主机提供 ServerName。

Apache 使用接收请求的 IP 的反向,我期望是 www.domain1.com;因此您的第二个虚拟主机被隐藏了。

答案2

问题是你的第一个 IP 唯一的节,

<VirtualHost 155.155.155.101>
    DocumentRoot /www/155.155.155.101
</VirtualHost>

不包含ServerName或 ,ServerAlias而后面带有域的配置节包含 或 。Apache 将尝试将传入连接与VirtualHost匹配的第一个配置节进行匹配。由于使用解析为 IP 的域的连接将匹配 IP 而无需进一步细化(ServerNameServerAlias),因此它用于处理连接。

因此,您应当确保每个VirtualHost配置节都有一个ServerNameServerAlias选项,以及DocumentRoot或者,您应当确保更具体的VirtualHost配置节首先出现在配置文件中,然后是较不具体的配置节(即,带或不带选项的 IP 地址本身)ServerName

因此,以下操作应该可以按您预期的方式运行:

NameVirtualHost 155.155.155.100
NameVirtualHost 155.155.155.101
NameVirtualHost 155.155.155.102
NameVirtualHost 155.155.155.103

<VirtualHost 155.155.155.101>
    ServerName www.domain1.com
    ServerAlias www.domain1.com
    DocumentRoot /www/domain1.com
</VirtualHost>

<VirtualHost 155.155.155.101>
    DocumentRoot /www/155.155.155.101
</VirtualHost>

相关内容