使用 Apache 作为反向代理时在重定向过程中携带 cookie

使用 Apache 作为反向代理时在重定向过程中携带 cookie

我正在尝试在本地计算机上使用 Apache 设置反向代理,我的 httpd.conf 中有以下内容:

ProxyPass /app http://x.com
ProxyPassReverse /app http://x.com

一切运行正常,浏览 127.0.0.1/app/* 也按预期运行。当我浏览到重定向到同一主机名但不同端口的资源的 URL 时,问题就出现了。最初我以为我可以按如下方式处理这种情况:

ProxyPass /app:81 http://x.com:81
ProxyPassReverse /app:81 http://x.com:81

但尽管这种方法有效,但 Cookie 似乎无法在重定向过程中传递。我该如何让 Cookie 在重定向过程中传递?此外,虽然端口实际上是预先知道的,但有没有更可靠的方法来处理这个问题,以便正确处理到任意端口的重定向?

答案1

您不能有端口规范ProxyPass /app:81- 相反,要监听的端口应该由VirtualHost所在的块决定ProxyPass

创建第二组VirtualHost端口 81,然后ProxyPass /app http://x.com:81在其中放置一个以获得您想要的行为。

答案2

好吧,您可以在路径中使用“端口”号,但不要使用“:”。

ProxyPassReverse /app ht+p://x.com
ProxyPassReverse /app81 ht+p://x.com:81

假设您的网站是 ht+p://y.com:

y.com/app --> x.com

y.com/app81 --> x.com:81

我更喜欢使用后端应用程序的名称。事实上,你可能有许多不同的应用服务器,但希望所有 Web 请求看起来都来自同一个位置:

ProxyPassReverse /games ht+p://x.com:8080/games
ProxyPassReverse /finance ht+p://f.com:7000/money
ProxyPassReverse /movies ht+p://m.com:8001/cinema

y.com/游戏 --> x.com:8080/游戏

y.com/finance --> f.com:7000/money

y.com/电影 --> m.com:8001/电影院

答案3

Cookies 不一定在不同的端口号之间共享。这是因为浏览器行为定义不明确,而不是您的反向代理配置。

我建议您坚持使用端口 80(或 443)作为前端,并使用不同的 URL 路径而不是不同的端口号。

相关内容