如何在多个目标主机上为 ProxyPassMatch 指定 ProxyPassReverse?

如何在多个目标主机上为 ProxyPassMatch 指定 ProxyPassReverse?

我正在使用 httpdmod_proxy设置 CORS 代理,类似于事物代理或者crossorigin.me我已经

SSLProxyEngine on
<LocationMatch "^/corsproxy/(https?)://([^/]+)/(.*)$">
    ProxyPassMatch "$1://$2/$3"
    Header set Access-Control-Allow-Origin "https://my-site.org/"
    Header unset X-Frame-Options
</LocationMatch>

这是可行的,因为您可以访问http://myhost/corsproxy/http://example.com/somepage并且它成功加载。问题是,重定向仍然直接指向example.com,而不是等效的代理 URL。

这就是它的作用ProxyPassMatch所在,但我不相信它能够对目标 URL 进行正则表达式匹配,所以我无法像在 中那样提取协议、主机名和路径LocationMatch。有解决方法吗?也许我可以用 做些什么mod_rewrite

在评论出现之前:是的,我知道安全后果,是的,我想尝试完全在 httpd 内部执行此操作,而不是运行我在问题开头链接到的工具,因为它们引入了外部依赖项(在两种情况下都是 NodeJS)。

答案1

我不确定ProxyPassReverse通常会做什么,但只是为了重定向,我能够使用Header edit指令:

Header edit Location ^http://(.+)$ "/corsproxy/http://$1"
Header edit Location ^https://(.+)$ "/corsproxy/https://$1"

我尝试使用单行而不是两行,但遇到了一些奇怪的行为,不值得追踪。我仍然想知道是否还有其他我可能无法用这种方法覆盖的极端情况。

相关内容