我在 Apache 前端和多个 Tomcat 后端之间设置了一个反向代理。下面的代码块包含 ProxyHTMLURLMap 参数,因此可以重写 HTML 以删除 Tomcat 上下文路径。使用此设置后,登录我的应用程序后,初始 JSESSIONID 已正确设置,但当导航到任何其他页面时,此 JSESSIONID 会丢失,应用程序会设置另一个。
我应该提到,初始登录会指向包含当前上下文路径的 URL(即https://app.domain.com/context/home),但当导航到另一个页面时,该上下文路径并不存在于 URL 中(即https://app.domain.com/page2)。
<Proxy balancer://happcluster>
BalancerMember ajp://happ01.h.s.com:8009 route=worker1 loadfactor=10 timeout=15 retry=5
BalancerMember ajp://happ02.h.s.com:8009 route=worker2 loadfactor=10 timeout=15 retry=5
BalancerMember ajp://happ03.h.s.com:8009 route=worker3 loadfactor=5 timeout=15 retry=5
BalancerMember ajp://happ04.h.s.com:8009 route=worker4 loadfactor=5 timeout=15 retry=5
BalancerMember ajp://happ05.h.s.com:8009 route=worker5 loadfactor=5 timeout=15 retry=5
ProxySet lbmethod=bytraffic
ProxySet stickysession=JSESSIONID
</Proxy>
ProxyPass /context balancer://happcluster/context
ProxyPass / balancer://happcluster/context/
<Location /context/>
# Rewrite HTTP headers and HTML/CSS links for everything else
ProxyPassReverse /
ProxyPassReverseCookieDomain / app.domain.com
ProxyPassReverseCookiePath / /context
ProxyHTMLURLMap /context/ /
# Be prepared to rewrite the HTML/CSS files as they come back
# from Tomcat
SetOutputFilter INFLATE;proxy-html;DEFLATE
</Location>
有人遇到过类似的情况吗?
答案1
所以我弄清楚了问题所在。我必须反转以下参数
ProxyPassReverseCookiePath /context /
现在我没有丢失 JSESSIONID。