Apache反向代理优化核心是精简模块、选用event MPM、静态资源直服、调优连接池与流式行为;需禁用冗余模块,设置MaxRequestWorkers 150、KeepAliveTimeout 5、ProxyPass /static !,并配置flushpackets=on和ProxyTimeout 30。

Apache 反向代理本身不运行 Java,但常与 Tomcat、Spring Boot 等 Java 后端配合使用。内存占用高,往往不是因为“代理逻辑复杂”,而是配置冗余、资源未收敛、静态资源误转发或缓冲策略不当所致。优化核心是:精简自身开销、减少与后端无效交互、控制连接生命周期。
只加载必需模块,禁用全部冗余功能
默认 Apache 加载大量模块(如 mod_php、mod_dav、mod_cgi),而 Java 场景下这些完全无用,却持续占用进程常驻内存。
- 保留必要模块:mod_proxy、mod_proxy_http、mod_ssl、mod_rewrite、mod_headers、mod_expires、mod_mime
- 注释掉所有其他
LoadModule行(如 mod_perl、mod_info、mod_status、mod_autoindex) - 验证生效:执行
httpd -M | grep -E "(proxy|ssl|rewrite)",确保输出干净无多余模块
选用 event MPM 并收紧并发参数
prefork 模型为每个请求 fork 一个进程,内存开销大;event MPM 基于事件驱动,支持多线程复用,更适合反向代理场景(尤其后端 Java 已具备高并发能力)。
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 确认启用
mpm_event_module,并在httpd.conf中关闭 prefork 和 worker - 设置
MaxRequestWorkers 150(根据物理内存调整,例如 2GB 内存建议 ≤200) - 调低
KeepAliveTimeout 5和MaxKeepAliveRequests 100,避免空闲连接长期占位 - 添加
HostnameLookups Off,禁用 DNS 反查,减少阻塞与缓存开销
让 Apache 直接服务静态资源,绕过 Java 后端
所有请求都经 ProxyPass 转发到 Java,会导致 Java 堆内存压力陡增(GC 频繁)、Apache 代理缓冲膨胀、网络路径拉长。关键做法是:静态路径显式排除。
- 在虚拟主机中添加静态资源映射:
Alias /static "/var/www/static",并配置对应<Directory>权限 - 启用强缓存:
ExpiresByType text/css "access plus 1 month"、Header set Cache-Control "public, max-age=2592000" - 在 ProxyPass 前插入排除规则:
ProxyPass /static !,确保该路径不被代理
调优代理连接池与流式行为,避免请求体缓存
海量 POST(如文件上传、批量导入)容易触发 Apache 全量缓存请求体至内存或磁盘,造成 OOM。重点不是“分块”,而是“不缓存+可控流”。
- 禁用内部缓冲:
SetEnv force-proxy-request-1.0 1+SetEnv nokeepalive 1 - 在 ProxyPass 中启用流式传输:
ProxyPass /upload/ http://backend:8080/upload/ flushpackets=on flushwait=10000 nocanon - 限制单请求体大小:
LimitRequestBody 536870912(512MB,按需下调) - 设置合理超时:
ProxyTimeout 30,并匹配后端 P95 响应时间(建议设为 2–3 倍)

















