管理大量 Apache vhost ServerAliases

管理大量 Apache vhost ServerAliases

因此,我得到了这个由 Apache 2 作为虚拟主机提供服务的网站。它拥有大量备用域名,所有这些域名都应该可以解析到它。

到目前为止,我已经通过在 vhost 配置文件中的 ServerAlias 列表中添加额外的域来处理此类问题。但随着别名域的数量不断增加,该列表变得非常长且难以处理。它还需要分别添加裸域和“www”版本,这(因为我必须记住添加两者)让我有可能犯傻并忘记添加其中一个。还没有发生过这种情况,但是当列表足够长时,这样的遗漏不会像只有几个域时那样突然出现,所以我担心有一天它会不可避免地出现。

似乎应该有一种方法可以将别名列表从 vhost 配置文件中移出到其他可以更轻松地管理它们的地方。即使是每个别名都占一行的文本文件也是一种改进,因为至少这样可以比用逗号分隔的长行更容易地直观地扫描列表。而且似乎应该有一种方法可以让 vhost 自动处理“www”子域,而不需要为每个域手动添加“www”别名。但我一直在寻找类似的东西,但还没有找到任何明显的解决方案。

这可能只是我没有在正确的地方寻找,但以防万一——有没有更优雅的方式来处理虚拟主机的 ServerAliases?如果有,那是什么?

答案1

Include您可以使用指令来代替要从文件中提取的实际选项,从外部文件中包含任意配置设置。(如果您是老派 perl 专家,还有一个 mod_perl 选项 ;-)

1.使用Include 指示ServerAlias,像这样包含来自文本文件的列表conf.d/mydomain.conf

<VirtualHost *:80>
    ServerName www.mydomainname.com 
    # instead of ServerAlias, include a file containing those directives
    Include /etc/httpd/conf/MyDomainServerAlias.list
...
</VirtualHost>

然后生成带有前缀的指令列表,ServerAlias如下所示
/etc/httpd/conf/MyDomainServerAlias.list

ServerAlias mysqdomain.com www2.mysqdomain.com www.mysqdomain.com www.mysqdomain.com www.mysqdomain.com www.mysqdTTTomain.com www.mCCysqdomain.com www.mysqdomain.com

或者每行一个,因为这可能更方便检查和编写脚本;

ServerAlias mysqdomain.com 
ServerAlias www.mysqdomain2.com 
ServerAlias mysqdomain2.com 
ServerAlias www.mysqdomain.com

2.你可以动态配置apache 使用<Perl>块使用mod_perl

 <Perl>
  $ServerName = `hostname`;
  $ServerAlias = 'somethingelse.com';
  </Perl>

因此,您可以使用任何您喜欢的 Perl 魔法在启动时配置别名列表 ;-)

3.可能还有其他一些(更简单的;-) 方法......

答案2

您可以在 vhost 配置文件中多次重复 ServerAlias 行。我认为您不会得到更接近愚蠢的 text.file 的文件。但是,您必须记得添加 www 文件...

答案3

如果你在主上下文中配置“catch-all”站点,会怎么样?范围?那么你需要服务器别名仅适用于作为不同虚拟站点的域名。

答案4

编写一个程序来帮你填写这些行怎么样?在类似的应用程序中,每个名称都有一个 VHost,大约有 50 个名称需要处理,我让 Puppet 生成它们。然后我只需列出:

mySite::newSite{ 'example.com': }

它会生成两个 VHost(一个用于端口 80,一个用于端口 443),分别带有example.comwww.example.com。这意味着文件里全是这些mySite::newSite行,但这并不坏 :)

您不必使用 Puppet,任何语言都可以实现这一点。Ruby erb 文件是一种选择。

相关内容