生产环境中apache虚拟主机调优需围绕隔离性、资源可控性、安全收敛和请求效率四主线系统推进:为每个虚拟主机独立配置documentroot、日志路径、rlimitmem/cpu、禁用allowoverride;按站点启用独立压缩、缓存与磁盘缓存目录;严格限制目录浏览、敏感路径访问及管理后台权限;并结合mpm与keepalive参数按业务特性精细化控制连接行为。

生产环境中 Apache 虚拟主机的调优,不是单独改几个参数就能见效的事,而是要围绕隔离性、资源可控性、安全收敛和请求效率四条主线来系统推进。虚拟主机不是“多开几个网站”那么简单,配置不当容易互相干扰、拖垮整站,甚至成为攻击入口。
按域名/业务隔离资源与日志
每个虚拟主机应有独立资源边界,避免一个站点异常影响全局:
- 为每个 `
` 单独指定 `DocumentRoot` 和 `ErrorLog` / `CustomLog` 路径,日志不混用
- 使用 `RLimitMEM` 和 `RLimitCPU`(需启用 `mod_rlimit`)限制单个站点最大内存与 CPU 时间
- 禁用全局 `.htaccess` 生效:在 `` 块中显式写 `AllowOverride None`,防止用户上传恶意重写规则
- 示例配置片段:
```apache
ServerName shop.example.com
DocumentRoot /var/www/shop
ErrorLog ${APACHE_LOG_DIR}/shop_error.log
CustomLog ${APACHE_LOG_DIR}/shop_access.log combined
AllowOverride None
Require all granted
```
启用独立缓存与压缩策略
不同站点内容类型差异大,统一配置反而低效:
- 在 `` 内启用 `mod_deflate` 并按 MIME 类型精细压缩:
```apache
AddOutputFilterByType DEFLATE text/html text/plain text/css application/javascript image/svg+xml
SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
```
- 配置专属 `Expires` 缓存头,静态资源设长缓存(如 `access plus 1 year`),动态接口禁用缓存(`Cache-Control: no-store`)
- 若使用 `mod_cache_disk`,为每个站点分配独立缓存目录并设置 `CacheRoot /var/cache/apache2/shop`
强化访问控制与安全收敛
虚拟主机是常见攻击面,必须做最小权限收敛:
- 禁用目录浏览:`Options -Indexes`(不要只依赖全局设置)
- 限制敏感路径访问,例如禁止访问 `.git`、`.env`、`wp-config.php` 等:
```apache
Require all denied
```
- 对管理后台路径(如 `/admin`, `/wp-admin`)做 IP 白名单或基础认证:
```apache
Require ip 192.168.10.0/24
# 或 Require valid-user + AuthType Basic ...
```
配合 MPM 与 KeepAlive 做连接粒度控制
虚拟主机本身不处理连接,但它的行为受底层 MPM 和连接策略直接影响:
- 若使用 `mpm_event`,确保 `ThreadsPerChild` 和 `MaxRequestWorkers` 足够支撑所有虚拟主机并发请求
- 在 `` 中覆盖默认 KeepAlive 行为(尤其对 API 类站点):
```apache
KeepAlive On
KeepAliveTimeout 3
MaxKeepAliveRequests 200
```
- 对纯静态资源站点(如 CDN 回源),可适当提高 `MaxKeepAliveRequests`;对高交互后台,则建议设低些(如 50),加快连接释放
不复杂但容易忽略。