我们有一个应用服务器位于http://foo.bar。
需要使用反向代理通过 http:// wibble/foo 进行访问。
我已经做到了这一点,但是 http:// foo.bar 中有内容引用自 /
例如:
/图片/blah.jpg
因此它尝试获取 http:// wibble/images/blah.jpg 而不是
http://wibble/foo/images/blah.jpg
知道如何让它为从 / 引用的任何内容插入 /foo 前缀吗?
答案1
mod_proxy绝不修改 HTML。
仅会重写上面特别提到的 HTTP 响应标头。Apache 不会重写其他响应标头,也不会重写 HTML 页面内的 URL 引用。这意味着,如果代理内容包含绝对 URL 引用,它们将绕过代理。查看 HTML 内部并重写 URL 引用的第三方模块是 Nick Kew 的 mod_proxy_html。
答案2
如果您使用 nginx 作为前端服务器,则可以使用 HttpSubModule 执行替换。本质上,nginx 应该代理请求并对返回的文本执行替换。不过,我相信,如果您在后端有压缩,您就不能使用它(所以只要您在前端服务器上有压缩,就没问题):
本质上:Nginx -> 代理到 apache -> 返回 Nginx -> 执行替换 -> 压缩并提供服务
我推测 Apache 和其他服务器也存在类似的模块。