Apache:动态反向代理

Apache:动态反向代理

是否可以让 Apache 服务器动态代理由子目录定义的所有请求?例如:

https://proxy.example.com/host1           -> https://host1.example.com
https://proxy.example.com/host2           -> https://host2.example.com
https://proxy.example.com/host3/dir1      -> https://host3.example.com/dir1

奖金:

https://proxy.example.com/host4:8000      -> https://host4.example.com:8000
https://proxy.example.com/host5:8080/dir2 -> https://host5.example.com:8080/dir2

我的知识有限,咳咳。下面的例子可以扩展一下吗?

RewriteEngine On
RewriteRule ^(.*)$ https://%{HTTP_HOST} [P]

SSLEngine on
SSLProxyEngine On
ProxyRequests Off

ProxyPass            /  https://$1/
ProxyPassReverse     /  https://$1/
ProxyPreserveHost On

亲切的问候

答案1

您可以ProxyPassMatch像这样使用该指令:

ProxyPassMatch /([^/]*)/(.*)$ https://$1.example.com/$2

然而,您只会得到部分结果。

代理部分可以工作,但是 cookie 路径会有所不同:当您请求/host1,而后端服务器将 cookie 设置为 时/,这可能会导致问题。此外,重定向处理不正确:如果目标主机重定向到绝对 URL,例如将标头设置Location: http://...为其自身,则代理不会重写该标头,从而使浏览器遵循直接链接。

可以使用ProxyPassReverseProxyPassReverseCookieDomainProxyPassReverseCookiePath指令来解决 cookie 和重定向问题,但据我所知,它们都不支持正则表达式或任何类型的动态映射。当然,您可以逐个指定它们,但这会使整个动态代理想法变得毫无意义。

相关内容