Apache反向代理转发请求到Tomcat的核心是启用mod_proxy和mod_proxy_http模块,并通过ProxyPass/ProxyPassReverse实现透明转发,无需修改Tomcat配置。
apache 反向代理转发请求到 tomcat,核心是启用 mod_proxy 和 mod_proxy_http 模块,并在虚拟主机中配置 proxypass 与 proxypassreverse。整个过程不需改动 tomcat,也不要求客户端感知代理存在。
启用必要的代理模块
确保 Apache 加载了反向代理所需模块。在配置文件(如 /etc/httpd/conf.modules.d/00-proxy.conf 或 conf/httpd.conf)中确认以下两行未被注释:
LoadModule proxy_module modules/mod_proxy.soLoadModule proxy_http_module modules/mod_proxy_http.so
若使用负载均衡或 AJP 协议,可额外启用 mod_proxy_balancer 或 mod_proxy_ajp,但 HTTP 方式下非必需。
配置虚拟主机实现转发
在 <VirtualHost> 块中设置转发规则。例如将所有请求代理至本地 Tomcat 的 8080 端口:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
- 添加
ProxyPreserveHost On:让 Tomcat 日志记录真实访问域名,而非localhost - 用
ProxyPass / http://localhost:8080/将根路径请求转发过去 - 用
ProxyPassReverse / http://localhost:8080/重写响应头中的Location、Set-Cookie等字段,避免跳转失效或 Cookie 域名错误
若只代理子路径(如 /app),则写成:ProxyPass /app http://localhost:8080/appProxyPassReverse /app http://localhost:8080/app
处理 HTTPS 终止场景
当 Apache 前端启用 HTTPS(SSL 终止),而 Tomcat 仍用 HTTP 连接时:
- 虚拟主机监听
*:443,配置 SSL 证书 -
ProxyPass和ProxyPassReverse仍指向http://localhost:8080/(无需改用 HTTPS) - Tomcat 的
server.xml中 Connector 不必开启secure="true"或scheme="https",除非应用显式依赖这些参数
如需让 Tomcat 感知 HTTPS 请求,可在代理配置中添加请求头:RequestHeader set X-Forwarded-Proto "https"
并在 Tomcat Connector 中配置:remoteIpHeader="x-forwarded-for" protocolHeader="x-forwarded-proto"
权限与调试要点
Apache 2.4 默认拒绝所有代理访问,需显式授权:
- 在
<VirtualHost>内或独立<Proxy>块中添加:
<Proxy *><br>Require all granted<br></Proxy>
- 检查 SELinux 是否阻止网络连接(Linux):
setsebool -P httpd_can_network_connect 1 - 验证配置语法:
apachectl configtest,再重启服务 - 查看 Apache 错误日志(如
/var/log/httpd/error_log)排查连接拒绝、超时等问题

















