在Apache中创建IP vHost

时间:2013-10-24 09:01:37

标签: apache virtualhost

我想创建一个与域名和IP地址(特定)一起使用的Apache vHost。我试过这个但它失败了:

<VirtualHost IP:80>
    DocumentRoot /var/www/website/
</VirtualHost>

2 个答案:

答案 0 :(得分:3)

首先,Apache作为2种主要模式,基于ip的虚拟主机或name based virtualhosting

现在第二种方式适用于NameVirtualhost

指令

第一个链接中最重要的部分是(粗体添加):

  

重要的是要认识到基于名称的虚拟主机解析的第一步是基于IP的解析。基于名称的虚拟主机解析仅在将候选者缩小到最佳基于IP的匹配后才选择最合适的基于名称的虚拟主机。 在所有VirtualHost指令中使用通配符(*)表示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相关联的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

答案 1 :(得分:2)

试试这个

<VirtualHost *:80>
  ServerName example.com
  ServerAlias IP-Address
  DocumentRoot /var/wwww/website
</VirtualHost>