将特定用户的 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 管理。

有没有更好的方法?

通常 VirtualHosts 匹配 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总是第一个。

好的,这就是我最后做的事情:

  1. 已将 /var/cpanel/templates/apache2_4/main.default 复制到 /var/cpanel/templates/apache2_4/main.local

  2. 编辑了新创建的副本以删除默认的 VirtualHost 指令(我在第 344 行之前插入了 [%- IF 0 %],在第 385 行之前插入了 [% END -%])。

  3. 已编辑 /var/cpanel/conf/apache/primary_virtual_hosts.conf 以便为所需的 IP 地址指定所需的默认主机的名称。

  4. 运行 /scripts/rebuildhttpdconf.

  5. 人工验证/usr/local/apache/conf/httpd.conf.

  6. 优雅地重新启动 Apache。