【问题标题】:Promote particular user's Apache VirtualHost to default将特定用户的 Apache VirtualHost 提升为默认值
【发布时间】:2015-06-04 16:02:16
【问题描述】:

正如 Apache 在Using Name-based Virtual Hosts 下记录的:

如果未找到匹配的虚拟主机,则将使用列出的第一个虚拟主机与 IP 地址匹配。

因此,第一个列出的虚拟主机是默认虚拟主机。

目前,/var/cpanel/templates/apache2_4/main.default 的模板使用DocumentRoot [% serverroot %]/htdocs 生成这样一个默认的 VirtualHost(每个 IP 地址)。

我们希望为特定用户生成的VirtualHost 是默认值。完成此任务的最佳/推荐方式是什么?

我目前的想法是将用户的(编译的)VirtualHost 指令放在/usr/local/apache/conf/includes/pre_virtualhost_2.conf 中,但这显然不会由 WHM 管理,如果用户的配置发生变化。

有没有更好的办法?

【问题讨论】:

  • 我刚刚尝试了ServerAlias * 并残酷地发现该指令匹配真的任何东西,包括以前声明的虚拟主机。有那么一瞬间,我以为它起作用了!
  • “我们希望为特定用户生成的 VirtualHost 成为默认值”。请求如何链接到“用户”?所以你说你有来自没有虚拟主机的 URL 域的 HTTP 请求,并且你希望它们被路由到特定用户?所以你必须有 IP 地址的用户 1to1 吗?否则没有意义。
  • @S.Pinkus:怎么没有意义?我希望所有 Web 请求,无论主机名如何(除非被更具体的规则覆盖),都被路由到特定用户。对我来说似乎很简单!事实上,这正是 Apache 文档中的引用所描述的。
  • 我对“特定用户”的含义感到困惑。
  • 我认为这是题外话,因为它与服务器管理有关,与编程完全无关。

标签: apache cpanel virtualhost whm


【解决方案1】:

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

  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。

【讨论】:

    【解决方案2】:

    我们目前使用的方案是首先包含 特定 默认 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 永远是第一位的。

    【讨论】:

      【解决方案3】:

      创建一个 .htaccess 将所有请求代理回 localhost 但在内部端口上。然后为新端口添加一个 Listen 指令,并为您想要的默认端口添加一个 VirtualHost。

      我应该提到这很丑,但我认为它满足您的需求。

      【讨论】:

        【解决方案4】:

        我知道有点老派,但是在默认页面上使用框架进行 url 屏蔽可能是最简单的方法吗?

        【讨论】:

          【解决方案5】:

          一般VirtualHosts 匹配 DNS 条目,包括通配符。

          在我看来,您的情况就像您正在激活一个新站点,并且在 DNS 准备就绪时,主机还不可用,因此您想临时显示一个特定的 VirtualHost

          我过去遇到过类似的问题,并通过在默认的VirtualHost 中创建一个.htaccess 来解决它,该VirtualHost 重定向到我想要的站点。

          这还有一个好处是用户可以清楚地在浏览器中查看真实的主机名。

          我知道这不是您想要的解决方案,但我认为没有其他方法可以实现这一点,因为这限制了正常使用中的应用程序(异常行为)。

          【讨论】:

          • 遗憾的是,这在我们的情况下不起作用:由所需的“默认” VirtualHost 服务的站点确定要从请求的主机名提供的内容 - 重定向会丢失此信息(虽然可以将其转发到所服务的网站,例如通过查询字符串参数,出现的用户体验对于这个项目是不可接受的)。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-04-13
          • 2016-06-19
          • 2014-04-14
          • 1970-01-01
          • 1970-01-01
          • 2014-01-21
          • 1970-01-01
          相关资源
          最近更新 更多