我正在尝试在本地计算机上使用 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 路径而不是不同的端口号。