我有一台带有 Apache 反向代理的服务器。服务器计算机包含 2 个在以下位置运行的 Web 应用程序:
- 本地主机:8000/应用程序并暴露为my.url.com/app1
- 本地主机:8001/应用程序并暴露为my.url.com/app2
它们本质上是 Web 应用程序的不同版本,我们希望它们都能正常运行。两个都webapps 像这样创建 cookie:
Set-Cookie: sessionid=as7d86fa98sg67; Path=/app; HttpOnly
Domain
请注意, cookie 标头上没有属性。
我添加了两个不同的ProxyPassReverseCookiePath
指令,如下所示:
- ProxyPassReverseCookiePath /app /app1
- ProxyPassReverseCookiePath /app /app2
目标是每个 Web 应用都将Path=/app
转换为适当的上下文。但是 ProxyPassReverseCookiePath 指令似乎相互覆盖,并且不了解它们所运行的 Web 应用。
总结:
ProxyPass /app1/ http://localhost:8000/app/
ProxyPassReverse /app1/ http://localhost:8000/app/
ProxyPassReverseCookiePath /app /app1
ProxyPass /app2/ http://localhost:8001/app/
ProxyPassReverse /app2/ http://localhost:8001/app/
ProxyPassReverseCookiePath /app /app2
除了 cookie 路径属性外,此配置有效。在这两种情况下,它都会被替换,Path=/app1/
而我希望它特定于处理请求的每个应用程序。
答案1
经过一番搜索,解决方案是将指令分组到标签下<Location>
:
<Location /app1>
ProxyPassReverseCookiePath /app /app1
</Location>
<Location /app2>
ProxyPassReverseCookiePath /app /app2
</Location>
这样,Apache 就知道根据响应的来源正确应用每个指令。