在使用Apache作为反向代理时,Cookie跨越redirect

我试图在本地机器上使用Apache来设置反向代理,我在httpd.conf中有以下内容:

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

一切正常,浏览到127.0.0.1/app/*按预期工作。 当我浏览到执行redirect到相同主机名但不同端口的资源的URL时,问题就出现了。 起初我以为我可以处理这种情况如下:

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

但是,虽然这工作,cookies似乎并没有进行redirect。 我将如何获得cookies来进行redirect? 此外,虽然端口实际上是事先知道的,有没有更强大的方法来处理这个问题,以便redirect到任何任意端口被正确处理?

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

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

那么,你可以使用path中的“端口”号码,只是不使用“:”的。

 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/games – > x.com:8080/games

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

y.com/movies – > m.com:8001/cinema

Cookie不一定在不同的端口号上共享。 这是因为浏览器的行为不明确 ,而不是您的反向代理configuration。

我build议你坚持使用端口80(或443)的前端,并使用不同的URLpath,而不是不同的端口号。