用Include抽离VirtualHost配置的核心是将重复、易变、按站点划分的部分单独成文件再引用,以提升多站点管理的安全性、可维护性和批量操作能力。

用 Include 把 VirtualHost 配置抽离,核心是把重复、易变、按站点划分的部分单独成文件,再在主配置或虚拟主机块里引用。这样做不是为了“炫技”,而是让多站点管理更安全、可维护、可批量操作。
按站点拆出 SSL 与安全头配置
每个 HTTPS 站点的证书路径、HSTS 设置、OCSP Stapling 等几乎都不一样,硬写在 <VirtualHost *:443> 里会导致每次换证书都要改主配置。
正确做法:为每个域名建独立 SSL 配置文件,比如 /etc/apache2/ssl/site1.com.conf,内容只含证书和安全策略:
-
SSLCertificateFile /etc/letsencrypt/live/site1.com/fullchain.pem -
SSLCertificateKeyFile /etc/letsencrypt/live/site1.com/privkey.pem -
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains" -
SSLUseStapling on
然后在对应 <VirtualHost *:443> 块内写一行:Include /etc/apache2/ssl/site1.com.conf
这样更新证书时,只需替换那个 .conf 文件,不用碰任何 <VirtualHost> 结构。
抽离通用访问控制与目录权限
Apache 2.4+ 要求明确授权,像 <Directory> 块里的 Require all granted 是刚需,但不同站点根目录路径不同,不能完全复用。
推荐方式:建一个模板式权限文件 /etc/apache2/conf-available/site-permissions.conf,内容为:
<Directory "${SITE_ROOT}">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>再在每个 VirtualHost 中用变量注入路径:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
SetEnv SITE_ROOT /var/www/site1.com/public_html Include /etc/apache2/conf-available/site-permissions.conf
注意:需启用 mod_env 模块,并确保 Apache 支持环境变量解析(部分旧版本不支持 ${VAR} 语法,此时改用符号链接或脚本生成更稳妥)。
按功能分层 Include,避免单点失效
不要把所有东西塞进一个大文件里。建议分三层:
- 公共层(如 TLS 协议限制、默认密码套件)→
/etc/apache2/conf-available/tls-policy.conf - 站点层(域名、文档根、日志路径)→
/etc/apache2/sites-available/site1.com.conf - 扩展层(PHP-FPM 设置、缓存规则、防盗链)→
/etc/apache2/sites-available/site1.com.extra.conf
主 httpd-vhosts.conf 只负责加载顺序和基础结构,例如:
<VirtualHost *:80>
ServerName site1.com
Redirect permanent / https://site1.com/
</VirtualHost>
<VirtualHost *:443>
ServerName site1.com
DocumentRoot /var/www/site1.com/public_html
Include /etc/apache2/conf-available/tls-policy.conf
Include /etc/apache2/sites-available/site1.com.conf
IncludeOptional /etc/apache2/sites-available/site1.com.extra.conf
</VirtualHost>注意 Include 路径与生效逻辑
-
Include是相对主配置路径解析的,推荐用绝对路径,避免歧义。 -
IncludeOptional更安全:文件不存在时不报错,适合灰度启用某项配置。 - Debian/Ubuntu 推荐用
a2ensite+sites-available/sites-enabled机制,本质也是IncludeOptional sites-enabled/*.conf,比手动写Include更规范。 - 修改后务必执行
apache2ctl -t(Debian)或httpd -t(RHEL)验证语法,再systemctl reload apache2生效。
不复杂但容易忽略。

















