Apache conf VirtualHost 被忽略

Posted

技术标签:

【中文标题】Apache conf VirtualHost 被忽略【英文标题】:Apache conf VirtualHost ignored 【发布时间】:2020-02-06 22:27:22 【问题描述】:

我在 CentOS 7 上运行 apache。 我在 /etc/httpd/conf.d 中有 2 个配置文件:

A10-my_site_dev.conf A10-my_site_test.conf

由于它们相似,我只给你看其中一个文件:

<VirtualHost *:443>
    ErrorLog "logs/my_site_test.log"
    SSLCertificateFile /etc/ssl/host/host.crt
    SSLCertificateKeyFile /etc/ssl/host/host.key

    Alias /my-site/test/static /var/www/my_site_test/static/
    <Directory /var/www/my_site_test/static>
        Require all granted
    </Directory>

    WSGIScriptAlias /my-site/test /var/www/my_site_test/app/wsgi.py
    <Directory /var/www/my_site_test>
        Require all granted
    </Directory>
</VirtualHost>

目前,A10-my_site_test.conf 中的 VirtualHost 被忽略。如果我去https://my-server.com/my-site/test,我有一个404,但https://my-server.com/my-site/dev 工作正常。 如果我删除 A10-my_site_dev.conf 并重新启动 apache,https://my-server.com/my-site/test 可以工作。 我知道它只需要第一个 VirtualHost apache 找到。

我感觉我的 ssl.conf 中的 VirtualHost 也被忽略了,因为如果我将 SSLCertificateFileSSLCertificateKeyFile 移动到 ssl.conf,我会遇到以下错误:

我尝试不使用 VirtualHost,在这种情况下一切正常。我认为除了第一个之外,所有的 VirtualHost 都被忽略了。

我在使用其他端口(例如 80)时遇到了同样的问题。

另一点:我读到我应该有一个 ServerName。但是我的所有环境都有相同的 ServerName。我尝试将诸如“my_site_test”之类的随机内容作为 ServerName,但我得到了 404。

如何配置 apache 以使我的 2 个文件正常工作?

【问题讨论】:

【参考方案1】:

这不是 VirtualHosts 的工作方式。尤其是 SSL。

所以你有:

<VirtualHost *:443>
    CONFIGURATION FOR DEV
</VirtualHost>

<VirtualHost *:443>
    CONFIGURATION FOR TEST
</VirtualHost>

两个 VirtualHost 之间的唯一区别是日志和目录?这是行不通的。

Apache 可以根据以下因素区分 VirtualHost 部分:

与域关联的 IP 端口 ServerName(用于非 SSL 配置)

按照您现在的配置方式,Apache 无法区分这两个 VirtualHost。所以它需要它找到的第一个。这就解释了与证书混淆的原因。

工作配置示例

# www.example1.com == 1.1.1.1
# www.example2.com == 2.2.2.2

<VirtualHost 1.1.1.1:443>
    ServerName www.example1.com

    # SSL CONFIG
    # LOGS CONFIG
    # OTHER CONFIGURATION

</VirtualHost>

<VirtualHost 2.2.2.2:443>
    ServerName www.example2.com

    # SSL CONFIG
    # LOGS CONFIG
    # OTHER CONFIGURATION

</VirtualHost>

阅读文档(再次?),这对你有好处:https://httpd.apache.org/docs/2.4/vhosts/examples.html

这个网站上有一些帖子解释了 SSL VirtualHosts 配置的细节(我什至自己写了一些)。

【讨论】:

在我的情况下,IP 和端口是相同的,我没有服务器名称。然后,如果我为每个 VirtualHost 写一个随机的 ServerName(如我所说),apache 将不会重新启动。 编辑:apache 启动,但我有一个 404。因为我的假服务器名不匹配。 你不能使用 Apache 在同一个 IP、同一个端口、同一个 ServerName 上为 2 个 VirtualHost 提供服务。不可能,这不是它的工作原理。

以上是关于Apache conf VirtualHost 被忽略的主要内容,如果未能解决你的问题,请参考以下文章

Apache VirtualHost配置

Apache VirtualHost配置

如何使用 VirtualHost 将 http://example.com 重定向到 apache2.conf 中的 https://example.com

Apache VirtualHost的配置

VirtualHost 在 CentOS 7 上的 Apache 2.4.6 下无法运行

apache vhosts 虚拟主机设置