6

有谁知道如何在反向代理模式下告诉 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,它会回复一些东西(通常它会发回一些大文件)。


我的问题:
我不希望客户端知道 url 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 陷阱”功能,如果存在的话会很好,但到目前为止,还没有在网络上提供任何关于如何做到这一点的资金。任何想法?

4

2 回答 2

0

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

于 2009-07-17T17:35:04.697 回答
0

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

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

于 2014-07-16T15:07:56.617 回答