apache反向代理tomcat的核心是启用proxy、proxy_http等模块,配置proxypass/proxypassreverse实现请求转发与响应头重写,并通过proxypreservehost和tomcat connector参数确保域名、协议一致性。

Linux 中让 Apache 把流量反向代理到 Tomcat,核心是启用代理模块、设置转发规则,并确保响应头和会话信息正确传递。整个过程不依赖额外软件,只需标准 Apache 和 Tomcat 配置即可完成。
启用必要的代理模块
Apache 默认不加载代理功能,必须手动启用以下三个模块:
- mod_proxy:提供基础代理能力
- mod_proxy_http:支持 HTTP 协议转发(适用于大多数场景)
- mod_proxy_wstunnel:若应用含 WebSocket(如 Spring Boot 的 STOMP),必须启用
编辑主配置文件(Ubuntu/Debian 通常为 /etc/apache2/mods-enabled/proxy.load 或 /etc/apache2/apache2.conf;CentOS/RHEL 多在 /etc/httpd/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
保存后执行 sudo a2enmod proxy proxy_http proxy_wstunnel(Debian系)或 sudo systemctl restart httpd(RHEL系)使模块生效。
配置虚拟主机转发规则
在站点配置中(如 /etc/apache2/sites-available/000-default.conf 或 /etc/httpd/conf.d/vhost.conf)添加如下内容:
<virtualhost>
ServerName your-domain.com
ProxyPreserveHost On
<pre class="brush:php;toolbar:false;"># 将所有请求转发至本地 Tomcat(默认 8080)
ProxyPass / http://localhost:8080/
ProxyPassReverse / http://localhost:8080/
# 可选:静态资源绕过代理,直接由 Apache 提供(提升性能)
ProxyPass /static !
Alias /static /var/www/static
<Directory "/var/www/static">
Require all granted
</Directory>
ProxyPreserveHost On 确保 Tomcat 日志里记录的是真实域名,而非 localhost;ProxyPassReverse 自动改写响应头中的 Location、Set-Cookie 等字段,避免重定向失败或 Cookie 丢失。
适配 HTTPS 和 Tomcat 连接器
如果前端使用 HTTPS(SSL 终止在 Apache),无需修改 ProxyPass 的协议,仍指向 http://localhost:8080/。但需在 Tomcat 的 conf/server.xml 中对应 Connector 加入以下参数:
<connector port="8080" protocol="HTTP/1.1" connectiontimeout="20000" redirectport="443" scheme="https" secure="true" proxyname="your-domain.com" proxyport="443"></connector>
这样 Tomcat 生成的重定向 URL 和 Cookie 的 Secure 属性才会与实际访问协议一致。
验证与调试要点
配置完成后重启 Apache:sudo systemctl restart apache2 或 sudo systemctl restart httpd。检查是否生效:
- 访问 http://your-domain.com 应显示 Tomcat 应用首页
- 查看 Apache 错误日志:sudo tail -f /var/log/apache2/error.log(Debian)或 /var/log/httpd/error_log(RHEL)
- 确认 Tomcat 正常监听 8080(ss -tlnp | grep :8080)且防火墙放行该端口
- 若页面样式错乱,大概率是静态资源路径未正确处理,可启用上面的 /static ! 规则或检查应用内 basePath 设置











