Apache中配置基于域名的安全规则分发,核心是将域名识别与安全策略绑定,通过VirtualHost块为每个域名独立设置访问控制、认证、资源限制和日志审计,实现多站点隔离防护。

在 Apache 中配置基于域名的安全规则分发,核心是把“域名识别”和“安全策略绑定”结合起来——不是给整个服务器加一刀切的防护,而是按 每个域名(或子域名)独立设定访问控制、认证、资源限制和日志审计规则。这既保障多站点隔离性,又避免误伤合法请求。
一、用 VirtualHost 实现域名级策略隔离
所有安全规则必须放在对应域名的 <VirtualHost> 块内,否则会全局生效或失效。关键点:
-
ServerName 必须精确匹配:比如设为
www.example.com,就不会匹配example.com或api.example.com,需用ServerAlias显式补充; - 优先级靠前的 VirtualHost 会捕获未匹配请求:建议把默认兜底配置(如拒绝非法 Host 头)放在最前面;
- HTTPS 域名策略需在 :443 端口块中重复定义,不能复用 :80 的配置,SNI 之后才解析 Host 头。
二、按域名设置访问控制与认证
不同域名可采用不同粒度的权限模型。例如:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 对外官网(
www.company.com):允许全网访问,但禁止执行脚本:<Directory "/var/www/www"><br> Options -ExecCGI -Indexes<br> Require all granted<br> </Directory>
- 后台系统(
admin.company.com):仅限办公网段 + 基础认证:<Directory "/var/www/admin"><br> Require ip 192.168.10.0/24<br> AuthType Basic<br> AuthName "Admin Area"<br> AuthUserFile /etc/apache2/.htpasswd-admin<br> Require valid-user<br> </Directory>
三、按域名启用差异化安全模块
某些防护只对特定域名启用,避免影响性能或兼容性:
- 对 API 域名(
api.company.com)启用请求体限制和速率控制:LimitRequestBody 2097152 # 限制 POST 不超过 2MB<br> RLimitMEM 134217728 # 内存上限 128MB<br> # 配合 mod_evasive 或 mod_ratelimit 模块做每分钟请求数限制
- 对静态资源域名(
static.company.com)关闭 PHP 解析、禁用 .htaccess 覆盖:<Directory "/var/www/static"><br> AllowOverride None<br> php_flag engine off<br> Require all granted<br> </Directory>
四、按域名定制日志与审计策略
安全事件溯源依赖精准日志。不同域名应写入独立日志文件,并记录关键字段:
- 在对应 VirtualHost 中指定 CustomLog,加入 %{Host}i 记录实际请求域名:
CustomLog "logs/api-access.log" "%{Host}i %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" - 敏感域名(如支付页
pay.company.com)开启额外审计:LogFormat "%{Host}i %h %t \"%r\" %>s %b \"%{User-Agent}i\" \"%{X-Forwarded-For}i\"" paylog<br> CustomLog "logs/pay-audit.log" paylog
不复杂但容易忽略:安全规则分发的前提是 DNS 和 Host 头真实可信。生产环境务必确保反向代理(如 Nginx)透传原始 Host,并校验请求头无篡改;若走 CDN,需确认其支持 SNI 且未剥离 Host 字段。

















