如何在 Apache 2 中重写反向代理页面中引用的资源的根位置?

如何在 Apache 2 中重写反向代理页面中引用的资源的根位置?

我们有一个应用服务器位于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。

http://httpd.apache.org/docs/2.2/mod/mod_proxy.html

答案2

如果您使用 nginx 作为前端服务器,则可以使用 HttpSubModule 执行替换。本质上,nginx 应该代理请求并对返回的文本执行替换。不过,我相信,如果您在后端有压缩,您就不能使用它(所以只要您在前端服务器上有压缩,就没问题):

本质上:Nginx -> 代理到 apache -> 返回 Nginx -> 执行替换 -> 压缩并提供服务

我推测 Apache 和其他服务器也存在类似的模块。

相关内容