我正在实现一个反向 http 代理:
proxy.example.com
这将根据 URI 将请求转发到服务器:
proxy.example.com/server1 -> server1.example.com
当用户请求 proxy.example.com/server1 时,server1 会发送一个以编程方式生成的(Ruby Devise Gem)302 响应,其中包含以下“位置”值:
proxy.example.com/users/sign_in
我需要的是:
proxy.example.com/server1/users/sign_in
我在 Apache 中实现了以下配置:
ProxyPass "/server1/" "http://server1.example.com/"
ProxyPassReverse "/server1/" "http://server1.example.com/"
按照:
http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypassreverse
此指令允许 Apache 调整 HTTP 重定向响应中的 Location、Content-Location 和 URI 标头中的 URL。当 Apache 用作反向代理(或网关)时,这非常重要,以避免由于位于反向代理后面的后端服务器上的 HTTP 重定向而绕过反向代理。
但是 server1 返回的 Location 标头仍然是:
proxy.example.com/users/sign_in
我的配置有问题吗?
答案1
弄清楚了:
ProxyPass "/server1/" "http://server1.example.com/"
ProxyPassReverse "/server1/" "http://proxy.example.com/"