apache架构设计需按业务场景分层选型:静态网关侧重mod_proxy/cache/expires;动态应用启用mod_php/wsgi与mpm_event;反向代理仅留proxy/rewrite/ssl;混合部署推荐nginx前置+apache后端,并精简模块、匹配mpm、调优安全性能参数。

Apache 架构设计不是“配一个配置文件”就能完成的事,而是要根据业务场景、流量特征、安全要求和运维能力,分层选型、模块裁剪、角色分工。核心在于明确角色定位 + 匹配组件能力 + 避免功能重叠。
Apache 服务角色要先定清楚
不同部署目标对应不同架构重心:
-
静态资源网关:重点用
mod_proxy+mod_cache+mod_expires,前端加 Nginx 做负载和 SSL 终结 -
动态应用服务器:启用
mod_php/mod_wsgi/mod_proxy_fcgi,配合mpm_event提升并发处理能力 -
反向代理/路由中枢:关闭所有内容生成模块(如
mod_php),只留mod_proxy、mod_rewrite、mod_ssl,避免冗余开销 - 混合型服务:推荐“Nginx 前置 + Apache 后端”——Nginx 处理静态文件、HTTPS 卸载、限流;Apache 专注 PHP/Python 应用逻辑
模块启用要按需精简
Apache 默认加载很多模块,但生产环境应只启用必需项:
- 必开模块:
core、http_core、mod_so(DSO 支持)、mod_proxy(含proxy_http)、mod_ssl、mod_rewrite - 按需启用:
mod_deflate(压缩)、mod_headers(头管理)、mod_security(WAF)、mod_cache(缓存) - 建议禁用:
mod_info、mod_status(除非调试)、mod_userdir、mod_cgi(不安全且性能低)
可通过httpd -M查看已加载模块,用LoadModule注释或a2dismod(Debian 系)控制启停
MPM 模型必须匹配运行环境
MPM(Multi-Processing Module)决定 Apache 如何处理并发请求,选错会导致资源浪费或连接瓶颈:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
prefork:进程模型,适合非线程安全模块(如旧版 mod_php),内存占用高,适用于小流量或兼容性优先场景 -
worker:混合进程+线程,兼顾兼容与效率,但部分模块仍不支持线程安全 -
event:推荐首选,专为高并发优化,支持异步处理长连接(如 HTTP Keep-Alive、WebSockets),要求模块线程安全(现代 mod_php 7.4+、mod_wsgi 支持)
启动前确认:httpd -V | grep -i mpm,编译时若未指定,默认可能为 prefork;启用 event 需在 configure 中加 --with-mpm=event
安全与性能关键配置项
这些不是可选项,而是上线前必调参数:
-
ServerTokens Prod:隐藏 Apache 版本号,减少指纹暴露 -
Timeout 30:避免慢连接长期占用资源 -
KeepAlive On+MaxKeepAliveRequests 100+KeepAliveTimeout 5:平衡复用收益与连接维持成本 -
LimitRequestBody 10485760(10MB):防大文件上传耗尽内存 -
<directory></directory>块中禁用Options FollowSymLinks和AllowOverride All(改用.htaccess会大幅降低性能)
不复杂但容易忽略










