2015-03-31 42 views
0

由于Using Name-based Virtual Hosts下记录阿帕奇:促进特定用户的Apache的虚拟主机默认

如果没有找到匹配的虚拟主机,然后的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管理。

有没有更好的方法?

+0

我刚刚尝试过'ServerAlias *'并且残酷地发现这个指令匹配**真**任何东西,包括之前声明的虚拟主机。一秒钟以后,我认为它工作! – JohnKiller 2015-04-03 14:19:00

+0

“我们反而会将为特定用户生成的VirtualHost设置为默认值”。请求如何链接到“用户”?所以,你说你有没有虚拟主机的URL域的HTTP请求,并且你希望它们被路由到一个特定的用户?所以你必须拥有使用IP地址的用户1to1?否则没有意义。 – spinkus 2015-04-07 08:58:42

+0

@ S.Pinkus:它没有道理?无论主机名是什么(除非被更具体的规则所覆盖),我都希望所有的web请求都被路由到特定的用户。看起来很简单!事实上,这正是Apache文档中引用的内容。 – eggyal 2015-04-07 14:58:25

回答

0

好了,这是我落得这样做:

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

  2. 编辑新创建的副本删除默认VirtualHost指令(I线344和[% END -%]线385之前之前插入[%- IF 0 %])。

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

  4. Ran /scripts/rebuildhttpdconf

  5. 手动验证/usr/local/apache/conf/httpd.conf

  6. 良好地重新启动Apache。

1

一般而言VirtualHost与DNS条目匹配,包括通配符。

您的情况在我看来,您似乎正在激活一个新网站,并且在DNS准备就绪后,托管功能尚未可用,因此您想临时显示特定的VirtualHost

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

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

我知道这不是您想要的解决方案,但我不认为有任何其他方法可以实现此目标,因为这在正常使用情况下(异常行为)的应用受到限制。

+0

不幸的是,这在我们的情况下不起作用:由所期望的“默认”VirtualHost服务的站点确定要从所请求的主机名提供的内容 - 重定向会丢失此信息(同时可以将其转发给服务器网站,例如,通过查询字符串参数,这个项目所产生的UX将是不可接受的)。 – eggyal 2015-04-03 15:04:19

0

我知道一个有点古老的学校,但在默认页面上使用框架进行网址掩盖可能是最简单的事情吗?

0

创建一个.htaccess,它将所有请求都代理回到本地主机,但在内部端口上。然后为新端口添加一个Listen指令,并为该端口添加一个VirtualHost,这是您想要的默认端口。

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

0

我们目前使用的方案,其中我们首先包括具体默认虚拟主机配置文件,像这样(即之前的任何虚拟主机定义):

Include conf.d/vhost.d/default.conf.first 
Include conf.d/vhost.d/*.conf 

conf.d/vhost.d/default.conf.first定义的虚拟主机这种方式永远是第一位。