【问题标题】:Apache conf VirtualHost ignoredApache conf VirtualHost 被忽略
【发布时间】: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 个文件正常工作?

【问题讨论】:

    标签: apache ssl configuration virtualhost


    【解决方案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 提供服务。不可能,这不是它的工作原理。
    猜你喜欢
    • 2016-08-08
    • 2016-10-02
    • 2021-01-28
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 2018-04-13
    • 2020-07-05
    • 2022-01-23
    相关资源
    最近更新 更多