因此,我得到了这个由 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.com
和www.example.com
。这意味着文件里全是这些mySite::newSite
行,但这并不坏 :)
您不必使用 Puppet,任何语言都可以实现这一点。Ruby erb 文件是一种选择。