是否可以让 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://...
为其自身,则代理不会重写该标头,从而使浏览器遵循直接链接。
可以使用ProxyPassReverse
、ProxyPassReverseCookieDomain
和ProxyPassReverseCookiePath
指令来解决 cookie 和重定向问题,但据我所知,它们都不支持正则表达式或任何类型的动态映射。当然,您可以逐个指定它们,但这会使整个动态代理想法变得毫无意义。