【问题标题】:Apache proxy different context path cookie issueApache代理不同的上下文路径cookie问题
【发布时间】:2020-05-14 20:00:54
【问题描述】:

我目前正在开发一个将部署在 Docker 容器中的应用程序。 Docker 包含一个将应用程序作为 ROOT.war 运行的 Tomcat,因此位于顶层。

这个想法是,当我们的用户运行容器时,他们可能希望在各自服务器上的特定上下文路径上运行多个副本,例如:

https://somedomain.com/ahttps://somedomain.com/b

我的计划是简单地告诉他们像这样配置反向代理:

ProxyPreserveHost On
RewriteEngine On

# Map https://somedomain/a to http://internalserver:9001
RewriteRule     ^/a$ /a/ [R]
ProxyPass        /a/ http://internalserver:9001/
ProxyPassReverse /a/ http://internalserver:9001/

# Map https://somedomain/b to http://internalserver:9002
RewriteRule     ^/b$ /b/ [R]
ProxyPass        /b/ http://internalserver:9002/
ProxyPassReverse /b/ http://internalserver:9002/

其中 9001 和 9002 是运行我的应用程序副本的两个 Docker 容器的端口。

现在,这使应用程序运行,但 cookie 存在问题,因为 Tomcat 中服务器上的上下文路径始终为空,因此存在会话问题。

我见过几个关于类似情况的问题,但在所有情况下,人们都可以更改公共路径或 Tomcat 中的路径以使其匹配。就我而言,我根本无法做到这一点,因为我将规定我们软件的用户必须使用哪条路径。

以下是此类问题的示例:

https://serverfault.com/questions/311994/how-to-proxy-context-to-different-backend-context-in-apache https://serverfault.com/questions/495017/how-do-i-ensure-the-context-path-is-the-same-when-accessing-a-web-app-via-apache Tomcat behind an apache proxy error on path


有什么方法可以让这个设置正常工作吗?

我可以更改代理配置以某种方式转发上下文路径吗?

还有其他选择吗?

【问题讨论】:

    标签: apache docker tomcat reverse-proxy contextpath


    【解决方案1】:

    好的,我找到了一个非常简单的解决方案。也许它会帮助别人,所以我会在这里发布:

    我发现有一个名为 ProxyPassReverseCookiePath 的代理配置选项旨在用于我想要实现的目标,因此我将配置更改为:

    RewriteRule      ^/a$ /a/ [R]
    <Location /a/>
      ProxyPass        http://internalserver:9001/
      ProxyPassReverse http://internalserver:9001/
      ProxyPassReverseCookiePath / /a
    </Location>
    RewriteRule      ^/b$ /b/ [R]
    
    <Location /b/>
      ProxyPass        http://internalserver:9002/
      ProxyPassReverse http://internalserver:9002/
      ProxyPassReverseCookiePath / /b
    </Location>
    

    这会将来自内部服务器的每个 cookie 路径映射为 //a/b,具体取决于应用程序,这正是我想要的。如果没有可用的上下文路径,应用程序本身现在总是将 cookie 路径设置为 /。然后反向代理将其映射回请求的位置。

    【讨论】:

      猜你喜欢
      • 2018-03-18
      • 2016-04-03
      • 2017-04-22
      • 2016-03-17
      • 2019-08-06
      • 1970-01-01
      • 2019-07-28
      • 2016-02-16
      • 1970-01-01
      相关资源
      最近更新 更多