Apache 是否可以包含“包含 /path/to/*/live.conf”?

Wes*_*per 6 apache-2.2

我们将 VirtualHost 条目存储在站点的 SVN 存储库中的 (dev|staging|live).conf 文件中。

例如:

/var/www/vhosts/site1.com/live.conf
/var/www/vhosts/site2.com/live.conf
Run Code Online (Sandbox Code Playgroud)

能够自动包含它们会很方便,例如:Include /var/www/vhosts/*/live.conf

但这似乎不起作用。

我们用一个简单的 PHP 脚本解决了这个问题:

$vhosts = '';
foreach (glob('/var/www/vhosts/*/vhost/dev.conf') as $filename) {
    $vhosts .= "\nInclude $filename";
}

file_put_contents('/var/www/vhosts/vhosts.conf', $vhosts);
Run Code Online (Sandbox Code Playgroud)

但是,我希望简化并让 Apache (2.2.3) 完成这项工作,而无需 PHP 步骤。

可能的?

O G*_*O G 3

apache2 不支持包含中的通配符。但是,您可以按以下方式进行安排:

  • 为您的配置创建一些目录(例如 /etc/apache2/myconfigs)
  • 将您的配置动态符号链接到 apache2:
rm -f /etc/apache2/myconfigs/*
for i in $(find /var/www/vhosts/*/live.conf); do \
tempfn=$(echo $i|cut -d/ -f5-6|sed s,/,_,);  \
ln -s $i /etc/apache2/myconfigs/$tempfn.conf \
done
Run Code Online (Sandbox Code Playgroud)
  • 在 apache2.conf 中添加“包含 /etc/apache2/myconfigs”

注意:在剪切时,我使用 -f5-6 进行分隔符连接(以提供类似 site1.com_live.conf 符号链接名称的内容),但您可能必须根据自己的 fs 路径进行调整。注意:以上内容适用于bash,可能需要适应其他 shell。