Ubuntu 上选择 Apache2 模块的思路与步骤
- 明确业务目标:是提供静态站、动态 PHP 应用、反向代理/负载均衡、还是 API/网关。
- 选择并发模型:先确定 MPM(多处理模块),再按需叠加功能模块。
- 只启用必需模块:减少攻击面与资源占用,变更后用
systemctl reload apache2 平滑生效。
- 配置优先级:全局在 /etc/apache2/apache2.conf,模块在 mods-available/mods-enabled/,站点在 sites-available/sites-enabled/。
- 变更与验证:启用/禁用用 a2enmod/a2dismod,验证用
apache2ctl -M | grep <模块名>,必要时检查语法 apache2ctl configtest。
如何选择 MPM(多处理模块)
- prefork:每个进程一个线程,兼容性好,适合使用非线程安全的 PHP(如部分旧版 PHP 或某些扩展),但内存占用较高。
- worker:多进程+多线程,适合线程安全的 PHP,内存更省、并发更好。
- event:事件驱动,适合高并发短连接场景,通常内存占用最低。
- 选择建议:
- 需要兼容旧版或不确定线程安全的 PHP → 选 prefork。
- PHP 线程安全且并发较高 → 选 worker。
- 追求高并发与资源效率 → 选 event。
- 切换要点:不同 MPM 是互斥的,需安装对应包(如 apache2-mpm-prefork 等),修改 /etc/apache2/mods-enabled/mpm.conf 后
systemctl restart apache2。
常见场景与推荐模块组合
| 场景 |
推荐模块 |
关键配置要点 |
| 静态网站或简单代理 |
mpm_event/worker、mod_rewrite、mod_deflate、mod_expires、mod_headers |
开启压缩与缓存控制,减少带宽与时延 |
| 动态 PHP 站点(传统) |
mpm_prefork、libapache2-mod-php、mod_rewrite |
若需 HTTPS,另加 mod_ssl;确保 PHP 与 MPM 匹配 |
| 高并发 API/网关 |
mpm_event、mod_proxy、mod_proxy_http/mod_proxy_wstunnel、mod_ssl |
反向代理与负载均衡,建议启用 HTTP/2 |
| 安全加固 |
mod_security、mod_spamhaus |
结合规则集与黑白名单,注意误杀与性能 |
| 性能加速 |
mod_pagespeed |
自动压缩、合并、缓存与优化静态资源 |
- 说明:上表为常见组合,实际仍需结合流量、后端与应用栈调优。
安装启用与验证的简明流程
- 安装模块:
- 通用:
sudo apt install <模块包名>(如 libapache2-mod-php、libapache2-mod-rewrite、libapache2-mod-spamhaus)。
- Pagespeed 等第三方包可按官方 .deb 安装并在完成后
reload。
- 启用/禁用:
sudo a2enmod <模块名>;sudo a2dismod <模块名>;变更后用 systemctl reload apache2。
- 验证:
- 列出已启用模块:
apache2ctl -M | grep <模块名>。
- 语法检查:
apache2ctl configtest,无误再重启。
安全与性能的最佳实践
- 安全:
- 仅启用必要模块,禁用示例与默认站点;为 端口 80/443 配置防火墙放行;为站点配置 SSL/TLS 证书。
- 结合 mod_security 做应用层防护,按需使用 mod_spamhaus 做黑名单过滤。
- 性能:
- 启用 Keep-Alive、mod_deflate、mod_expires;静态资源尽量由 CDN 承载。
- 合理设置并发参数(如 MaxRequestWorkers 等),避免过度消耗内存;定期更新系统与模块。