Apache通过mod_proxy、mod_alias等模块实现动静分离,静态资源由Apache直出,动态请求按路径精准代理至Tomcat,降低Tomcat压力并提升吞吐。

Apache 中 Java Web 部署实现动静分离,核心是让 Apache 专注响应静态资源(HTML、CSS、JS、图片等),而把动态请求(如 /api、/admin、.jsp、.do)精准转发给后端 Tomcat 处理。这不是简单拆域名或换服务器,而是通过模块协同与路径规则,在不改业务代码的前提下显著降低 Tomcat 压力、减少 JVM 线程争抢和 GC 频次,从而提升整体吞吐与响应速度。
启用并确认关键模块
缺一不可,否则代理或挂载会静默失败:
- mod_proxy 和 mod_proxy_http:提供 HTTP 反向代理能力
- mod_alias:用于将 URL 路径映射到本地静态目录
- mod_rewrite(推荐启用):支持按后缀、路径前缀等条件分流,逻辑更清晰
Ubuntu/Debian 下执行:
sudo a2enmod proxy proxy_http alias rewrite
sudo systemctl restart apache2
静态资源由 Apache 直出,不走 Tomcat
把构建好的前端产物(如 Maven 打包后生成的 src/main/resources/static 或独立 /var/www/myapp/static)交给 Apache 直接服务:
- 用 Alias 指令挂载路径,例如:
Alias /static /var/www/myapp/static - 配合
开启缓存与安全控制:
Require all granted
ExpiresActive On
ExpiresByType image/jpg "access plus 1 year" - 务必禁止脚本执行:
Require all denied
动态请求只代理明确路径,避免兜底转发
不要写 ProxyPass / http://localhost:8080/ 这类全量代理,否则所有请求(包括 favicon.ico、robots.txt)都会压到 Tomcat:
- 先排除静态路径:
ProxyPass /static ! - 再按需代理动态接口:
ProxyPass /api/ http://localhost:8080/myapp/api/
ProxyPass /admin/ http://localhost:8080/myapp/admin/
ProxyPass /.jsp http://localhost:8080/myapp/ - 必须配 ProxyPassReverse,否则 Tomcat 返回的重定向 Location 头(如登录跳转)会暴露内网地址
Tomcat 侧轻量适配,释放冗余负载
Apache 已接管静态服务,Tomcat 不再需要处理文件 I/O,可针对性减负:
- 关闭 Tomcat 内置静态资源处理(如注释掉 default servlet 的 welcome-file-list 或禁用 org.apache.catalina.servlets.DefaultServlet 映射)
- 调低连接器参数:maxThreads 可设为 150–200(非 500+),acceptCount 控制队列长度
- 禁用 AJP 连接器(除非用 mod_jk),统一走 HTTP/1.1 代理,更易调试且兼容性好
- 确保 Tomcat 只监听 127.0.0.1:8080,不对外暴露,由 Apache 充当唯一入口
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











