反向代理是否可以向另一个代理发出请求,并在响应内容中重写url?

我目前正在研究逆向代理,但没有具体的一个。

我正尝试通过身份validation通过Web上的另一个代理将反向代理的请求转发。 反向代理的主要原因是有用户重写的URL,当用户点击它,它将通过我的反向代理转发。 但是,它也需要通过一个真正的代理与身份validation。

所以基本上我试图实现的是,用户导航到一个站点,请求被反向代理捕获,反向代理然后通过另一个代理(通过代理validation)发出另一个请求。 当反向代理得到响应时,它会从响应中的内容中重写URL并将其传回给用户。

我的问题是,这是可能的吗? 如果是这样,我可以从哪里开始实施呢?

任何帮助表示赞赏,谢谢!

编辑:我find了一种方式来重写使用mod_replace mod代理中的url 。 但是还没有find通过另一个代理转发networking请求的方法

这是来自Apache的文档

ProxyPass指令

说明 :将远程服务器映射到本地服务器的URL空间

语法ProxyPass [path] !|url [key=value [key=value ...]] [nocanon] [interpolate] [noquery]

上下文 :服务器configuration,虚拟主机,目录

状态 :分机

模块 :mod_proxy

该指令允许远程服务器映射到本地服务器的空间中; 本地服务器在传统意义上并不作为代理,而似乎是远程服务器的镜像。 本地服务器通常被称为反向代理网关path是本地虚拟path的名称; url是远程服务器的部分URL,不能包含查询string。

注意 :该指令不能在上下文中使用。

ProxyRequests指令通常应该在使用ProxyPass时设置。

假设本地服务器的地址是http://example.com/; 然后

ProxyPass http://backend.example.com/

会导致http://example.com/mirror/foo/bar的本地请求被内部转换为http://backend.example.com/bar的代理请求。

以下可能的语法是可能的,但是当存在非常大的数字时,它可能带来性能损失。 以下语法的优点是可以通过Balancer Manager界面进行dynamic控制:

ProxyPass /mirror/foo/ http://backend.example.com/

如果第一个参数以/结尾,那么第二个参数也应该以/结尾,反之亦然。 否则,由此产生的请求到后端可能会错过一些需要的斜线,并不提供预期的结果。

那! 指令在你不想反向代理一个子目录的情况下很有用,例如

<Location /mirror/foo/>
ProxyPass http://backend.example.com/
</Location>

<Location /mirror/foo/i>
ProxyPass !
</Location>

ProxyPass /mirror/foo/i ! ProxyPass /mirror/foo http://backend.example.com

将所有的请求代理到/mirror/foobackend.example.com 除了/mirror/foo/i请求。

订购ProxyPass指令

configuration的ProxyPassProxyPassMatch规则按configuration顺序进行检查。 第一个匹配胜利的规则。 所以通常你应该首先从最长的URL开始sorting冲突的ProxyPass规则。 否则后面的更长的URLS的规则将被使用URL的前导子string的任何先前的规则隐藏。 请注意,与员工分享有一些关系。 相比之下,只有一个ProxyPass指令可以放置在Location块中,而最具体的位置将优先。 出于同样的原因,排除必须一般的ProxyPass指令之前

在Apache HTTP Server 2.1和更高版本中,mod_proxy支持池连接到后端服务器。 按需创build的连接可以保留在池中供将来使用。 池大小和其他设置的限制可以在ProxyPass指令中使用key=value参数进行编码,如下表所述。

默认情况下,mod_proxy将允许并保留该Web服务器subprocess可以同时使用的最大连接数。 使用max参数来减less默认值。 使用ttl参数设置可选的生存时间; 未使用至lessttl秒的连接将被closures。 可以使用ttl来避免使用由于后端服务器的保活超时而closures的连接。

每个Web服务器subprocess都维护连接池,除非configuration或MPMdevise只允许一个subprocess,否则max和其他设置不会在所有subprocess之间进行协调。

ProxyPass /example http://backend.example.com max=20 ttl=120 retry=300