基于Apache名称的虚拟主机

时间:2009-02-17 00:22:28

标签: apache

上次我尝试在我的开发机器上设置基于名称的虚拟主机时,我只是放弃并将网站映射到不同的端口。这一次,我正在努力做到这一点:)!

我已正确注册DNS条目并向服务器发送两个不同的标头:

Host: dev.site1.com
Host: dev.site2.com

然而,Apache让我很难将 dev.site2.com 映射到 dev.site1.com

这是我精简的配置:

Listen 80
ServerName localhost:80
NameVirtualHost *:80

<VirtualHost *>
    ServerName dev.site1.com
    DocumentRoot /www/site1
</VirtualHost>

<VirtualHost *>
    ServerName dev.site2.com
    DocumentRoot /www/site2
</VirtualHost>

我尝试过组合(如果没有效果):

ServerName site1.com
ServerName site2.com

ServerName site1.com
ServerAlias *.site1.com site1
ServerName site2.com site2
ServerAlias *.site2.com site2

我很高兴运行Apache 2.2并希望有一些人之前已经解决过这个问题并且可以帮助我。

2 个答案:

答案 0 :(得分:4)

我注意到以下事项:

  1. 您的ServerName是localhost:81 - 这不应该是localhost:80?
  2. 两个VirtualHosts的DocumentRoot是相同的 - / www / site1 - 所以即使它工作也会提供相同的页面
  3. 尝试为第二个虚拟主机创建单独的DocumentRoot。

    作为一点帮助,这是我的(工作,修剪,URL重命名)httpd.conf:

    NameVirtualHost *
    
    <VirtualHost *>
            DocumentRoot    /var/www/site1
            ServerName      my.website.co.nz
            ServerAlias     www.my.website.co.nz
    </VirtualHost>
    
    
    <VirtualHost *>
            DocumentRoot    /var/www/joker
            ServerName      another.site.co.nz
            ServerAlias     www.another.site.co.nz
    </VirtualHost>
    

    快乐狩猎!

    编辑:MrTopf有一个好点。 NameVirtualHost必须与VirtualHost指令完全匹配。请注意我的每个星号只有星号,而NameVirtualHost为*:80,VirtualHosts为*。

答案 1 :(得分:4)

我通常也在VirtualHost指令中指定端口,但不确定这是否可能是问题:

<VirtualHost *:80>
    ServerName dev.site2.com
    DocumentRoot /www/site2
</VirtualHost>

(我甚至通常指定IP地址,以确保它真正收听正确的IP地址,以防服务器在某个时刻获得额外的IP地址。)

事实上我只是注意到documentation这一行:

  

请注意,指令的参数必须与NameVirtualHost指令的参数完全匹配。

所以问题可能是您使用端口指定了NameVirtualHost,但是VirtualHost指令没有指定最终不使它们匹配的指令。