【问题标题】:Apache 2.4 VirtualHost ServerName is ignoredApache 2.4 VirtualHost ServerName 被忽略
【发布时间】:2016-10-02 12:48:04
【问题描述】:

在 Amazon EC2 上,我有以下配置:

<VirtualHost *:80>
    ServerName   a.example.com
    ServerRoot   /var/www/a.example.com
    DocumentRoot html
</VirtualHost>

<VirtualHost *:80>
    ServerName   b.example.com
    ServerRoot   /var/www/b.example.com
    DocumentRoot html
</VirtualHost>

<VirtualHost *:80>
    ServerName   c.example.com
    ServerRoot   /var/www/c.example.com
    DocumentRoot html
</VirtualHost>

问题是,尽管上述配置正确,对 3 个域名中任何一个的所有请求都被定向,就好像请求转到 c.example.com - 就好像 ServerName 值被忽略了一样。

有人看到这里有问题吗?

【问题讨论】:

    标签: apache amazon-ec2 virtualhost httpd.conf


    【解决方案1】:

    ServerRoot 只允许在 server config Context 中,而不是在 VirtualHost

    如果你尝试在其他地方使用它,你会得到一个配置错误, 将阻止服务器处理该请求 上下文正确,否则将阻止服务器运行 - 即,服务器甚至不会启动。

    【讨论】:

    • 太棒了。没有警告,没有错误,文件没有解析错误,甚至 httpd -S 显示正确的 VirtualHost 路由......只是非常糟糕的错误报告。
    • 确实有点奇怪。事实上,即使在 VirtualHost 中,该指令似乎也能正常工作,只是只应用了最后一个(甚至没有多个 ServerRoot 指令,因为它决定了许多其他相对路径的位置)
    【解决方案2】:

    我发现的问题是我构建的 Apache2:

    Server version: Apache/2.4.18 (Amazon)
    Server built:   Mar  7 2016 22:32:11
    

    没有正确处理DocumentRoot 参数。

    在 DocumentRoot 配置定义 here,它说

    如果目录路径不是绝对的,那么它被假定为 相对于 ServerRoot。

    好吧,这显然被忽略了,因为如果我将 DocumentRoot 值更改如下:

    <VirtualHost *:80>
        ServerName   b.example.com
        ServerRoot   /var/www/b.example.com
        DocumentRoot html
    </VirtualHost>
    

    到这里:

    <VirtualHost *:80>
        ServerName   b.example.com
        ServerRoot   /var/www/b.example.com
        DocumentRoot /var/www/b.example.com/html   #<-- updated
    </VirtualHost>
    

    然后配置工作。我还没有测试过这是否是核心 Apache 构建的问题,或者是否是亚马逊版本的问题,无论哪种方式,我希望这个答案对某人有所帮助。

    【讨论】:

      猜你喜欢
      • 2016-08-08
      • 2020-02-06
      • 2021-01-28
      • 1970-01-01
      • 2014-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-21
      相关资源
      最近更新 更多