我想创建一个同时使用域名和 IP 地址(特定)的 Apache vHost。我试过这个,但失败了:
<VirtualHost IP:80>
DocumentRoot /var/www/website/
</VirtualHost>
我想创建一个同时使用域名和 IP 地址(特定)的 Apache vHost。我试过这个,但失败了:
<VirtualHost IP:80>
DocumentRoot /var/www/website/
</VirtualHost>
起初 Apache 作为 2 种主要模式,基于 ip 的虚拟主机或基于名称的虚拟主机。
现在第二种方法适用于指令NameVirtualhost
给出的第一个链接上最重要的部分是(加粗):
重要的是要认识到基于名称的虚拟主机解析的第一步是基于 IP 的解析。基于名称的虚拟主机解析仅在将候选范围缩小到基于 IP 的最佳匹配后选择最合适的基于名称的虚拟主机。在所有 VirtualHost 指令中为 IP 地址使用通配符 (*) 会使这种基于 IP 的映射变得无关紧要。
当请求到达时,服务器将根据请求使用的 IP 地址和端口找到最佳(最具体)的匹配参数。如果有多个虚拟主机包含此最佳匹配地址和端口组合,Apache 将进一步将 ServerName 和 ServerAlias 指令与请求中存在的服务器名称进行比较。
所以你应该找到在你的主要 apache 配置上使用的当前NameVirtualHost
指令(通常NameVirtualhost *:80
),而不是这个单一模式使用几个,比如:
NameVirtualhost 127.0.0.1:80
NameVirtualhost 10.1.1.1:80
NameVirtualhost 192.168.10.42:80
然后在您的顶级定义中重新使用它VirtualHost
,与 right 相关联ServerName
:
<VirtualHost 10.1.1.1:80>
ServerName foo.bar.com
DocumentRoot /var/www/website/
</VirtualHost>
检查结果:
sudo su
# Debian
. /etc/apache2/envvars; apache2 -t -D DUMP_VHOSTS
# RedHat
httpd -t -D DUMP_VHOSTS
你应该得到类似的东西,这非常有用:
127.0.0.1:80 is a NameVirtualHost
default server foobar (/etc/apache2/sites-enabled/001-test:38)
port 80 namevhost foobar (/etc/apache2/sites-enabled/001-test:38)
port 80 namevhost project (/etc/apache2/sites-enabled/201-project:1)
port 80 namevhost toto (/etc/apache2/sites-enabled/503-toto:1)
10.1.1.1:80 is a NameVirtualHost
default server tutu (/etc/apache2/sites-enabled/601-tutu:24)
port 80 namevhost tutu (/etc/apache2/sites-enabled/601-tutu:24)
port 80 namevhost zorg (/etc/apache2/sites-enabled/701-zorg:42)
Syntax OK
尝试这个
<VirtualHost *:80>
ServerName example.com
ServerAlias IP-Address
DocumentRoot /var/wwww/website
</VirtualHost>