正如 Apache 在使用基于名称的虚拟主机下所记录的那样:
如果未找到匹配的虚拟主机,则将使用与 IP 地址匹配的第一个列出的虚拟主机。
因此,第一个列出的虚拟主机是默认虚拟主机。
目前,/var/cpanel/templates/apache2_4/main.default
的模板会生成这样一个默认的虚拟主机(每个 IP 地址(,并带有 DocumentRoot [% serverroot %]/htdocs
。
相反,我们希望为特定用户生成的VirtualHost
是默认值。 实现此目的的最佳/推荐方法是什么?
我目前的想法是将用户的(编译的(VirtualHost
指令放在/usr/local/apache/conf/includes/pre_virtualhost_2.conf
中,但如果用户的配置发生变化,这显然不会由 WHM 管理。
有没有更好的方法?
通常VirtualHost
s 与 DNS 条目匹配,包括通配符。
在我看来,您的情况就像您正在激活一个新站点,虽然 DNS 已准备就绪,但托管尚不可用,因此您想临时显示特定VirtualHost
。
我过去遇到过类似的问题,并通过在默认VirtualHost
内创建一个重定向到我想要的网站的.htaccess
来解决它。
这也有一个好处,即用户可以清楚地查看其浏览器中的真实主机名。
我知道这不是您想要的解决方案,但是我认为没有任何其他方法可以实现这一目标,因为这在正常使用中的应用程序有限(异常行为(。
我知道有点老派,但是在默认页面上使用框架进行 url 屏蔽可能是这里最简单的事情?
创建一个 .htaccess,将所有请求代理回本地主机,但在内部端口上。然后为新端口添加一个侦听指令,并为该端口添加一个所需的默认端口的 VirtualHost。
我应该提到这很丑陋,但我认为它满足了你的需求。
我们目前使用的方案首先包含特定的默认 VHost 配置文件,如下所示(即在任何 VHost 定义之前(:
Include conf.d/vhost.d/default.conf.first
Include conf.d/vhost.d/*.conf
这样,conf.d/vhost.d/default.conf.first
中定义的 VHost 始终是第一个。
好的,这就是我最终所做的:
-
已
/var/cpanel/templates/apache2_4/main.default
复制到/var/cpanel/templates/apache2_4/main.local
。 -
编辑了新创建的副本以删除默认的
VirtualHost
指令(我在 344 行之前插入了[%- IF 0 %]
,在第 385 行之前插入了[% END -%]
(。 -
/var/cpanel/conf/apache/primary_virtual_hosts.conf
编辑,以便为所需的 IP 地址指定所需的默认主机的名称。 -
冉
/scripts/rebuildhttpdconf
. -
手动验证
/usr/local/apache/conf/httpd.conf
. -
优雅地重新启动了Apache。