apache通过mod_proxy实现反向代理,需启用mod_proxy.so和mod_proxy_http.so模块,配置proxypass/proxypassreverse映射路径、preservehost、排除静态资源,并可选处理jsessionid以优化会话与seo。
apache 通过 mod_proxy 模块实现反向代理,把 http 请求转发给后端 tomcat,核心是启用相关模块并配置 proxypass 和 proxypassreverse 指令。关键在于路径映射准确、头信息处理得当、静态资源不误转。
确保必要模块已启用
Apache 2.4 默认不自动加载代理模块,需在 httpd.conf 或 mods-enabled 中显式启用:
mod_proxy.so-
mod_proxy_http.so(用于 HTTP 协议转发) - 可选:
mod_rewrite.so(用于清理 jsessionid 或重写 URL)
典型加载方式:
LoadModule proxy_module modules/mod_proxy.so<br>LoadModule proxy_http_module modules/mod_proxy_http.so
基础反向代理配置示例
假设 Tomcat 运行在本机 http://localhost:8080/myapp,希望用户通过 https://example.com/app 访问该应用:
<virtualhost><br> ServerName example.com<br> ProxyPreserveHost On<br> ProxyRequests Off<br><proxy><br> Require all granted<br></proxy><br> ProxyPass /app http://localhost:8080/myapp<br> ProxyPassReverse /app http://localhost:8080/myapp<br></virtualhost>
说明:
Apache Superset 是一个广泛采用的开源 BI 平台,用于 SQL 探索、图表构建和仪表板交付。当代理需要查询仓库数据、组装仪表板或使用成熟的分析界面解释指标而不是临时笔记本代码时,此技能非常有用。
-
ProxyPreserveHost On:让 Tomcat 收到原始 Host 头(如example.com),对虚拟主机或重定向逻辑很重要 -
ProxyRequests Off:禁用正向代理,仅保留反向代理能力,增强安全性 -
ProxyPassReverse:改写 Tomcat 返回的Location、Set-Cookie等响应头中的 URL,避免跳转出错
排除静态资源,提升性能
Apache 更适合直接提供图片、CSS、JS 等静态文件。可在代理规则前加排除项,避免无谓转发:
ProxyPass /app/static !<br>ProxyPass /app/images !<br>ProxyPass /app/css !<br>ProxyPass /app/js !<br>ProxyPass /app http://localhost:8080/myapp<br>ProxyPassReverse /app http://localhost:8080/myapp
注意:排除规则必须写在 ProxyPass 主规则之前,否则无效。
处理会话标识(可选但推荐)
Tomecat 默认在 URL 后附加 ;jsessionid=xxx,影响 SEO 和缓存。可用 mod_rewrite 清除:
RewriteEngine On<br>RewriteCond %{REQUEST_URI} ;jsessionid= [NC]<br>RewriteRule ^(.*)$ $1? [R=301,L]
或者更稳妥地,在 Tomcat 的 context.xml 中设置:<context sessioncookiepath="/" cookies="true" usehttponly="true"></context>,配合 Apache 的 ProxyPreserveHost 和正确 Cookie 路径,使会话更稳定。










