反向代理模式 Apache 拦截或捕获来自后端服务器的 302 响应并在内部重定向而不将 302 响应发送回客户端
Posted
技术标签:
【中文标题】反向代理模式 Apache 拦截或捕获来自后端服务器的 302 响应并在内部重定向而不将 302 响应发送回客户端【英文标题】:Reverse proxy mode Apache intercept or trap 302 responses from backend server and redirect internally without sending 302 response back to client 【发布时间】:2010-11-11 18:31:06 【问题描述】:有谁知道如何告诉 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 陷阱”功能,如果存在的话会很好,但到目前为止,还没有在网络上提供任何关于如何做到这一点的资金。有什么想法吗?
【问题讨论】:
服务器配置问题可能会在 serverfault.com 上得到更好的答案 【参考方案1】:使用 ProxyPassReverse 指令,web_server_A 将修改 web_server_B 发送的 Location 头,因此客户端不会知道他。
要捕获来自上游服务器的重定向,您还可以编辑 Location 标头。例如“标题未设置位置”将显示 apache 默认 30X 错误页面
【讨论】:
【参考方案2】:作为反向代理,Apache 将无法“阻止回复”。它不是审查员。 不过,你可以自己写这样的东西。
【讨论】:
以上是关于反向代理模式 Apache 拦截或捕获来自后端服务器的 302 响应并在内部重定向而不将 302 响应发送回客户端的主要内容,如果未能解决你的问题,请参考以下文章