【问题标题】:Apache name based virtual hosting基于 Apache 名称的虚拟主机
【发布时间】:2009-02-17 00:22:28
【问题描述】:

上次我尝试在我的开发机器上设置基于名称的虚拟主机时,我刚刚放弃并将网站映射到不同的端口。这一次,我想把它做好:)!

我已经正确注册了 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,希望有一些以前解决过同样问题的人可以帮助我。

【问题讨论】:

    标签: apache


    【解决方案1】:

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

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

    (我什至指定 IP 地址通常是为了确保它真的在监听正确的地址,以防服务器在某个时候获得额外的 IP 地址)。

    其实我只是在documentation 中注意到这一行:

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

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

    【讨论】:

    • 嗯,很棒的收获!谁曾想到 :)?似乎是这样。坦率地说,当我读到“ServerName 将匹配传入标头中的主机参数”时,我确信我做的一切都是正确的,但似乎我应该做得更好。谢谢:)!
    • 嗯,通常是你没有直接发现的小东西,不是吗? ;-) 很高兴它起作用了:-)
    【解决方案2】:

    我注意到以下几点:

    1. 您的 ServerName 是 localhost:81 - 这不应该是 localhost:80 吗?
    2. 两个 VirtualHost 的 DocumentRoot 是相同的 - /www/site1 - 所以即使它可以工作也会提供相同的页面

    尝试为第二个虚拟主机创建一个单独的 DocumentRoot。

    作为一个帮助,这是我的(工作,修剪,网址重命名)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 指令完全匹配。请注意我如何只为其中的每一个添加一个星号,而您有一个 *:80 的 NameVirtualHost 和带有 * 的 VirtualHosts。

    【讨论】:

    • 抱歉,我拼错了第二个文档根目录。是的,这正是我正在做的,但一切似乎都只是指向第一个 VHost 条目。
    • 你能发布你的整个配置吗?
    • 是的,缺失的 :80 实际上让我思考和挖掘文档。以前不知道 Apache 这么挑剔 ;-)
    猜你喜欢
    • 2013-12-13
    • 1970-01-01
    • 2016-04-24
    • 1970-01-01
    • 2014-09-23
    • 2015-07-10
    • 1970-01-01
    • 2014-07-20
    • 2012-01-22
    相关资源
    最近更新 更多