Apache反向代理Tomcat的核心是让Apache接收用户请求(如http://example.com),再转发至Tomcat(如http://localhost:8080),并重写响应头确保透明性;需启用proxy、proxy_http、proxy_wstunnel等模块,配置ProxyPass/ProxyPassReverse及ProxyPreserveHost,并根据HTTPS或泛域名需求调整Tomcat connector参数。

Apache 反向代理把请求转给 Tomcat,核心就是让 Apache 接收用户访问(比如 http://example.com),再把请求悄悄发给本地或远程的 Tomcat(比如 http://localhost:8080),同时把 Tomcat 返回的内容原样送回浏览器——整个过程对用户透明。
启用必需的代理模块
Apache 默认不开启代理功能,必须手动加载几个关键模块:
- 编辑主配置文件
httpd.conf(Linux 常在/etc/apache2/httpd.conf或/usr/local/apache/conf/httpd.conf;Windows 在conf/httpd.conf) - 取消以下三行前的注释符号
#:LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_wstunnel_module modules/mod_proxy_wstunnel.so
- 如果要用 AJP 协议(性能更好、更安全),还要加上:
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so - WebSocket 支持(如 Spring Boot 的 STOMP)依赖
proxy_wstunnel,不能省略
配置虚拟主机和 ProxyPass 规则
在虚拟主机配置块中(如 sites-available/000-default.conf 或 conf/extra/httpd-vhosts.conf)添加转发规则:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
ProxyPreserveHost On:确保 Tomcat 日志里记录的是真实域名(比如example.com),而不是localhost -
ProxyPass / http://localhost:8080/:把所有根路径请求转发到 Tomcat 的 8080 端口 -
ProxyPassReverse / http://localhost:8080/:自动改写响应头中的Location、Set-Cookie等字段,避免跳转失败或 Cookie 丢失 - 若 Tomcat 应用部署在子路径(如
/myapp),则写成:ProxyPass / http://localhost:8080/myapp/和ProxyPassReverse / http://localhost:8080/myapp/
适配 HTTPS 和 Tomcat 连接器
如果前端是 HTTPS(SSL 终止在 Apache),Tomcat 仍可用 HTTP 接收请求,但需做两件事:
- Apache 的
<VirtualHost *:443>中保持ProxyPass / http://localhost:8080/(协议不用改成 https) - 修改 Tomcat 的
conf/server.xml,在对应<Connector port="8080">中添加:proxyName="example.com" proxyPort="443" scheme="https" secure="true"
- 这样 Tomcat 就能正确生成 HTTPS 链接(如重定向、绝对 URL),不会误输出
http://
泛二级域名代理(可选扩展)
想用不同二级域名指向不同 Tomcat 应用(如 app1.example.com → Tomcat 的 /app1,app2.example.com → /app2):
- 先在 DNS 设置泛解析:
*.example.com → 你的服务器 IP - Apache 虚拟主机中用
ServerName和ServerAlias匹配通配符:<VirtualHost *:80> ServerName example.com ServerAlias *.example.com ProxyPreserveHost On ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ </VirtualHost>
- 再配合 Tomcat 的
host配置或应用上下文路径区分不同项目

















