_default_:443 的 Apache2.4 优先于第一个 *:443 虚拟主机定义
Posted
技术标签:
【中文标题】_default_:443 的 Apache2.4 优先于第一个 *:443 虚拟主机定义【英文标题】:Apache2.4 precedence of _default_:443 over first *:443 virtualhost definition 【发布时间】:2018-09-20 01:02:25 【问题描述】:我在一个开发服务器上运行 Apache 2.4.6,很长一段时间以来,它一直在许多开发服务器上愉快地托管许多 VirtualHost
站点 (*:443),主要的一个(其中碰巧是第一个)我们将调用<mainsite>.net
(它运行的服务器与ServerName
不匹配,所以<servername>.net
将始终选择<servername>
的默认虚拟主机,它应该是<mainsite>
/p>
我最近添加了主站点 ServerAlias *.<mainsite>
的一个变体,其中 conf.d 文件为 <mainsite>-wild.conf
,但一切都停止了工作。
问题似乎归结为<VirtualHost *:443 _default_:443>
在我的<mainsite>.conf
中与<mainsite>-wild.conf
中的<VirtualHost *:443>
的优先级。显然<mainsite>-wild.conf
在加载conf.d
时出现在<mainsite>.conf
之前。
我已经设法通过使用apachectl -S
来确定哪个站点具有“默认”标志来调试问题,奇怪的是它不一定是带有_default_
的站点,它是第一个出现的站点conf.d 文件夹,这让我有些吃惊(如果 _default_
被忽略,它有什么用)。
我的结论是我可以通过将<mainsite>.conf
重命名为00-<mainsite>.conf
来绕过这个问题,但我想知道的是为什么 Apache 忽略了_default_
?仅仅是因为它的 *:443 吗?我认为在发布 SNI 的日子里这不再是问题了,这就引出了一个问题,这是 apache 中的错误吗?
我在网上搜索并发现没有讨论涉及 Apache 2.4(当 Listen/NameVirtualHost 设置更改时)或在 SNI 之后(在此之前您无法真正在 :443 上执行 VirtualHost,除非它们都共享证书),所以以为我会问 ***。有人有什么想法吗?
【问题讨论】:
【参考方案1】:在 Apache 2.4 <VirtualHost>
指令中,字符串 _default_
是 *
的别名。
http://httpd.apache.org/docs/2.4/mod/core.html#virtualhost
【讨论】:
以上是关于_default_:443 的 Apache2.4 优先于第一个 *:443 虚拟主机定义的主要内容,如果未能解决你的问题,请参考以下文章
php5.6-Apache2.4-mysql5.6环境配置(win7_64位)