我正在寻找一种方法来组织构成 apache 站点启用配置的文件。
假设我的网络服务器上有网站 A、B 和 C。这些网站有不同的文档根目录和不同的重写规则以及不同的身份验证要求。定义别名和目录上下文。我在基于 Debian 的服务器上。
我想要http和httpsA、B 和 C 版本。
对于 VirtualHost ServerName www1.myhome.com;
,我想为 A 和 B 提供服务。
对于 VirtualHost ServerName www2.myhome.com;
,我想为 B 和 C 提供服务。
如何避免A、B、C的配置重复?
我尝试使用不同形式的包含。例如将 A 的配置包含到不同的虚拟主机中,但我发现文件路径问题很麻烦。特别是它不允许我这样做a2ensite A
。此外,它还使配置文件的故障排除变得很麻烦。这一切都是从 Apache2.2 迁移到 Apache2.4 的一部分。
这个问题有好的解决办法吗?
配置站点A.B和C结构类似。
Alias /A /srv/rootA/
<Directory /srv/rootA/>
// Unique stuff for A
// In particular Auth and rewrite rules
</Directory>
答案1
这是众多解决方案中的一个,我假设您使用的是基于 Debian 的服务器。
在您的 apache 服务器根目录中,创建一个目录instances
。在此目录中创建与“站点”(A、B 或 C)数量相同的配置文件。在其中定义您需要的内容并相应地命名每个文件。
在sites-available
目录中,为您需要的每个虚拟主机创建一个文件。在这些文件中,像往常一样定义您的虚拟主机,并根据需要包含“站点”配置,即:
# Vhost for www1.myhome.com
<VirtualHost *:80>
Include instances/siteA.conf
Include instances/siteB.conf
</VirtualHost>
此后,您将能够a2ensite
更轻松地进行操作和调试。
有关 Apache include 命令的参考:http://httpd.apache.org/docs/2.4/mod/core.html#include