反向代理模式Apache拦截或捕获来自后端服务器的302响应并在内部重定向,而不将302响应发送回客户端

时间:2009-07-17 16:16:05

标签: apache redirect reverse-proxy http-status-code-302

有没有人知道如何在反向代理模式下告诉Apache拦截或捕获来自后端服务器的302(或30x)响应并在内部重定向而不向客户端发送30x响应? 最终,响应被重定向的后端服务器将无法从外部访问(或未在Apache conf中列出)。


我的情况:
我有web_server_A和web_server_B侦听端口6666和7777.这些端口不能从外部访问,但可以从内部访问。
我最终可以更改web_server_A的行为,但不能更改web_server_B的行为。
Apache正在侦听端口80/443,可从外部访问,并充当反向代理,将发送到web_server_ {A,B} .example.com的请求发送到web_server_ {A,B}

客户端向Apache请求web_server_A.example.com/foo。 Apache将请求代理到web_server_A,后者生成一些内容,然后将指向web_server_B.example.com/bar/secret_token的HTTP / 302响应发送回Apache。 Apache向客户端发回302响应,然后向Apache发送web_server_B.example.com/bar/secret_token的HTTP请求。 Apache将请求代理到web_server_B,后者回复了一些内容(通常会发回一些大文件)。


我的问题:
我不希望客户端知道网址web_server_B.example.com/bar/secret_token,最终我不希望从外面访问web_server_B。

web_server_A可以向web_server_B发出请求,然后从web_server_B发回答案,而不发出302回复。但是,web_server_B的答案可能需要一些时间,可能会非常大,而web_server_A不应该在任何请求上花费太多时间(它无法处理大文件)。


所以我想到了一个“302捕手”功能,如果现有的话会很好,但到目前为止还没有在网上资助如何做到这一点。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

作为反向代理,Apache将无法“阻止回复”。这不是审查员。 不过,你可以自己写这样的东西。

答案 1 :(得分:0)

使用ProxyPassReverse指令,web_server_A将修改web_server_B发送的Location头,因此客户不会了解他。

要从上游服务器捕获重定向,您还可以编辑位置标头。例如"标题未设置位置"将显示apache默认的30X错误页面