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 也被忽略了,因为如果我将 SSLCertificateFile 和 SSLCertificateKeyFile 移动到 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 被忽略的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 VirtualHost 将 http://example.com 重定向到 apache2.conf 中的 https://example.com