将特定用户的 Apache 虚拟主机提升为默认值



正如 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 始终是第一个。

好的,这就是我最终所做的:

  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。

最新更新