如何创建到 URL 中指定主机的反向代理?

如何创建到 URL 中指定主机的反向代理?

我需要用 apache 配置代理来代理请求,例如

http://example.com/proxy/www.anothersite.com/[some-params]

http://www.anothersite.com/[some-params]

我尝试这样做:

<LocationMatch ^/proxy/(.*)$>
    ProxyPassMatch http://$1
</LocationMatch>

但是,如何才能让所有发往远程主机的重定向都通过代理进行呢?例如,如果我访问 URL:

http://example.com/proxy/another-site.com

并且 another-site.com 向我发送重定向到 yet-another-site.com,它会将我的浏览器转发到

http://example.com/proxy/yet-another-site.com

答案1

您可以使用 ApacheProxyPassReverse指令来实现这一点。您可以在以下位置找到其文档Apache 文档

答案2

我建议不要使用 Location 或 LocationMatch 块,只需使用 ProxyPass 和 ProxyPassMatch 的两个参数版本。因此,对于您的情况:

ProxyPassMatch ^/proxy/(.*)$ http://$1

但是您无法使用 Apache 配置来修复后端重定向,因为没有相应的 ProxyPassReverseMatch 指令(该指令根本无法以这种方式工作)。您需要使用 Header 指令(重复 ProxyPassReverse 指令所做的工作)编辑 Location、Content-Location 和 URI 标头,并可能使用 mod_sed/mod_substitute 来修复 HTML 中的硬编码 URL。

但这会很乱,非常乱。这种事情不容易做,因为一般来说,Apache 不是一个 HTML 内容感知服务器,而是一个 HTTP 感知服务器,这是两个完全不同的东西。

升级到 apache v2.4 可能会稍微容易一些,这样你就可以使用 mod_proxy_html(它你可以使用 HTML 感知 (HTML intelligent) 或者用 mod_lua 或类似工具编写自己的处理程序。

相关内容