如何配置Apache反向代理Tomcat | Apache反向代理Tomcat步骤详解
- 虚拟主机
- 2026-02-07
- 2602
要将 Apache 配置为 Tomcat 的反向代理,请按以下步骤操作:
核心配置步骤:
-
启用必要的 Apache 模块
sudo a2enmod proxy proxy_http proxy_wstunnel -
编辑 Apache 配置文件
在虚拟主机配置(如 /etc/apache2/sites-available/000-default.conf)中添加:
<VirtualHost *:80> ServerName yourdomain.com # 基本代理配置:将所有请求转发到 Tomcat ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ # 可选:代理 WebSocket 请求(如需要) ProxyPass /ws/ ws://localhost:8080/ws/ ProxyPassReverse /ws/ ws://localhost:8080/ws/ # 可选:自定义路径映射(将 /app 代理到 Tomcat) # ProxyPass /app http://localhost:8080/myapp/ # ProxyPassReverse /app http://localhost:8080/myapp/ </VirtualHost>
-
保存配置并重启 Apache
sudo apachectl configtest # 检查语法 sudo systemctl restart apache2
关键参数说明:
- ProxyPass:将客户端请求转发到 Tomcat(端口 8080)
- ProxyPassReverse:重写 Tomcat 响应中的 Location、Content-Location 等头部,确保客户端看到的是 Apache 地址而非 Tomcat 内部地址
- WebSocket 支持:通过 proxy_wstunnel 模块代理 ws:// 协议
高级配置场景:
仅代理特定路径(非根路径)
# 将 /myapp 的请求代理到 Tomcat 的 /app 路径 ProxyPass /myapp http://localhost:8080/app ProxyPassReverse /myapp http://localhost:8080/app
排除静态文件代理(由 Apache 直接处理)
# 优先处理本地静态文件,其余请求转发到 Tomcat ProxyPass /static ! ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/
HTTPS 配置(SSL 终止)
<VirtualHost *:443> ServerName yourdomain.com SSLEngine on SSLCertificateFile /path/to/cert.pem SSLCertificateKeyFile /path/to/privkey.pem # 通过 HTTPS 代理 HTTP 后端 ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ </VirtualHost>
Tomcat 连接器优化(server.xml)
在 Tomcat 的 conf/server.xml 中添加:

<Connector port="8080" protocol="HTTP/1.1" proxyName="yourdomain.com" <!-- 客户端看到的域名 --> proxyPort="443" <!-- 客户端访问的端口(SSL 用 443)--> secure="true" <!-- 若用 HTTPS 则设为 true --> connectionTimeout="20000" />
验证与调试:
-
检查代理是否生效:

观察返回的 Server 头部应包含 Apache 而非 Tomcat
-
查看日志:
- Apache 错误日志:/var/log/apache2/error.log
- Tomcat 访问日志:logs/localhost_access_log.*.txt
-
常见问题排查:
- 502 Bad Gateway:检查 Tomcat 是否运行在 8080 端口
- 404 Not Found:确认 Tomcat 应用路径与代理路径匹配
- WebSocket 失败:确保已启用 proxy_wstunnel 模块
通过以上配置,Apache 将作为前端代理处理客户端请求,并将动态内容无缝转发给后端的 Tomcat 服务器,同时隐藏 Tomcat 的内部细节。