pipe理大量Apache vhost ServerAliases

所以我有这个网站被Apache 2作为一个虚拟主机。它有一个公吨的替代域名,都应该解决这个问题。

到目前为止,我已经通过在vhostconfiguration文件的ServerAlias列表中添加额外的域来处理这样的事情。 但是,随着别名域名数量的增长,这个名单变得非常漫长和笨拙。 它还需要分别添加裸露的域名和“www”版本,(因为我必须记住添加两者)为我留下空间是一个白痴,忘记添加一个或另一个。 还没有发生,但是当这个清单足够长的时候,这样的遗漏就不会像他们那样只有几个域名跳出来,所以我担心这一点在某一天是不可避免的。

似乎应该有办法将vhostconfiguration文件中的别名列表踢到其他可以更容易pipe理的地方。 即使是一个文本文件,每个别名在自己的行上都是一个改进,因为至less可以更直观地浏览列表,而不是使用逗号分隔的长整行。 而且似乎应该有一种方法来为vhost自动处理“www”子域,而不是需要为每个域手动添加“www”别名。 但是我一直在寻找这样的东西,还没有find任何明显的解决scheme。

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

您可以使用Include指令从外部文件中包含任意configuration设置,以代替要从文件中提取的实际选项。 (也有一个mod_perl选项,如果你是一个old-skool perl向导;-)

1.使用Include 指令 ,从conf.d/mydomain.conf的文本文件中包含一个ServerAlias列表,像这样;

 <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.你可以使用mod_perl使用<Perl>块dynamic地configuration apache

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

因此,你可以使用任何你想在启动时configurationAliases列表的Perl魔法;-)

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

您可以多次重复vhostconfiguration文件中的ServerAlias行。 我觉得更接近一个愚蠢的text.file你不会得到。 但是,你必须记得添加www一个…

如果你在主要的环境中configuration你的“全部”网站,那么该怎么办? 范围? 那么你只需要ServerAlias的域名是不同的虚拟网站。

如何编写一个程序来填补你的这些界限? 在一个类似的应用程序中,我有一个VHost名称和约50名的照顾,我有木偶生成它们。 我然后只是列出:

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

它通过example.comwww.example.com生成两个VHost(一个用于端口80,一个用于端口443)。 这意味着有一个文件充满了这些mySite::newSite行,但这不是很糟糕:)

你不必使用Puppet,任何语言都可以帮助。 Ruby erb文件是一个选项。