Apache 模块 proxy_html 不起作用

Apache 模块 proxy_html 不起作用

我有一个 Joomla 4 网站在 Ubuntu 22.04 服务器(主机名 = web-02)中运行。在 Ubuntu 20.04 服务器(主机名 = web-01)中运行的面向 Internet 的 Web 服务器已配置为多个应用程序的反向代理。两台服务器都运行 Apache2.4。在 web-01 中,VirtualHost 的配置如下:

<VirtualHost *:443>
...
ProxyPass       /site2 http://web-02/site2
ProxyPassReverse    /site2 http://web-02/site2
...

从外部来看,当我调用 https://{real-domain-name}/site2/ 时,除了站点的徽标之外,大多数内容都显示正常。检查 HTML 后,我注意到这是由于错误的 URL 造成的:

   <img loading="eager" decoding="async" src="http://web-02/site2/images/headers/logo.gif" alt="xxxxxx" width="760" height="117">

在 web-01 上,我启用了以下 Apache2 模块

代理、proxy_connect、proxy_html、proxy_http、重写

如果我进入 web-01 并执行 wget http://web-02/site2/ 生成的 html 文件会显示错误的 URL:http://web-02/site2/images/headers/logo.gif

如果我进入 web-02 并执行 wget http://localhost/site2/,生成的 html 文件会显示错误的 URL:http://localhost/site2/images/headers/logo.gif

因此 Joomla 从 $_SERVER 变量中获取了完整的 URL,这是我无法更改的。

但最后,http://web-02/site2/... 到底是怎么出现的?这不就是 mod_proxy_html 的用途吗?

答案1

我发现使用 ProxyHTMLURLMap 重定向 css 和 js 请求 新的配置如下:

<Location /site2>
    ProxyPass       http://web-02/site2
    ProxyPassReverse    http://web-02/site2
    ProxyHTMLEnable     On
    RequestHeader unset Accept-Encoding
    ProxyHTMLURLMap     http://web-02/site2 /site2
</Location>

需要取消设置Accept-Encoding,这要归功于https://stackoverflow.com/questions/40683850/apache-proxying-leads-to-err-content-decoding-failed-error

相关内容