将特定用户的 Apache VirtualHost 提升为默认值
Promote particular user's Apache VirtualHost to default
Apache 在 Using Name-based Virtual Hosts 下记录:
If no matching virtual host is found, then the first listed virtual host that matches the IP address will be used.
As a consequence, the first listed virtual host is the default virtual host.
目前,/var/cpanel/templates/apache2_4/main.default
处的模板生成这样一个默认的 VirtualHost(每个 IP 地址)DocumentRoot [% serverroot %]/htdocs
。
我们希望为特定用户生成的 VirtualHost
成为默认值。 best/recommended 实现此目的的方法是什么?
我目前的想法是将用户的(已编译)VirtualHost
指令放在 /usr/local/apache/conf/includes/pre_virtualhost_2.conf
中,但如果用户的配置发生变化,这显然不会由 WHM 管理。
有没有更好的方法?
通常 VirtualHost
s 匹配 DNS 条目,包括通配符。
在我看来,您的情况就像您正在激活一个新站点,虽然 DNS 已准备就绪,但托管尚不可用,因此您想临时显示一个特定的 VirtualHost
.
我过去遇到过类似的问题,并通过在默认 VirtualHost
中创建一个 .htaccess
来重定向到我想要的站点来解决它。
这还有一个好处,即用户可以在他的浏览器中清楚地查看真实的主机名。
我知道这不是您想要的解决方案,但我认为没有任何其他方法可以实现此目的,因为这在正常使用情况下的应用有限(异常行为)。
我知道有点老派,但是 url 在默认页面上使用框架进行屏蔽可能是这里最简单的事情?
创建一个 .htaccess,将所有请求代理回本地主机,但在内部端口上。然后为新端口添加一个 Listen 指令,为该端口添加一个 VirtualHost,这是您想要的默认值。
我应该提一下,这很丑,但我认为它可以满足您的需求。
我们目前使用的方案首先包含 specific 默认 VHost 配置文件,就像这样(在 any 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。
Apache 在 Using Name-based Virtual Hosts 下记录:
If no matching virtual host is found, then the first listed virtual host that matches the IP address will be used.
As a consequence, the first listed virtual host is the default virtual host.
目前,/var/cpanel/templates/apache2_4/main.default
处的模板生成这样一个默认的 VirtualHost(每个 IP 地址)DocumentRoot [% serverroot %]/htdocs
。
我们希望为特定用户生成的 VirtualHost
成为默认值。 best/recommended 实现此目的的方法是什么?
我目前的想法是将用户的(已编译)VirtualHost
指令放在 /usr/local/apache/conf/includes/pre_virtualhost_2.conf
中,但如果用户的配置发生变化,这显然不会由 WHM 管理。
有没有更好的方法?
通常 VirtualHost
s 匹配 DNS 条目,包括通配符。
在我看来,您的情况就像您正在激活一个新站点,虽然 DNS 已准备就绪,但托管尚不可用,因此您想临时显示一个特定的 VirtualHost
.
我过去遇到过类似的问题,并通过在默认 VirtualHost
中创建一个 .htaccess
来重定向到我想要的站点来解决它。
这还有一个好处,即用户可以在他的浏览器中清楚地查看真实的主机名。
我知道这不是您想要的解决方案,但我认为没有任何其他方法可以实现此目的,因为这在正常使用情况下的应用有限(异常行为)。
我知道有点老派,但是 url 在默认页面上使用框架进行屏蔽可能是这里最简单的事情?
创建一个 .htaccess,将所有请求代理回本地主机,但在内部端口上。然后为新端口添加一个 Listen 指令,为该端口添加一个 VirtualHost,这是您想要的默认值。
我应该提一下,这很丑,但我认为它可以满足您的需求。
我们目前使用的方案首先包含 specific 默认 VHost 配置文件,就像这样(在 any 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。