Apache ProxyPassReverse 不转发位置响应

Apache ProxyPassReverse 不转发位置响应

我正在尝试使用 Apache 代理将子目录转发到 Linux 服务器上的 docker 设置,并使用 Apache 进行反向代理

以下是示例

<Location /foo/>

RewriteEngine On
ProxyPreserveHost Off

proxypass http://docker_host:8233/
ProxyPassReverse http://docker_host:8233/
ProxyPassReverseCookieDomain  "http://Docker_host:8233/"  "https://example.com/foo/"
ProxyPassReverseCookiePath  "/"  "/foo/"

</Location>

最终发生的事情是,当GET请求发送到https://example.com/foo/docker时302 Found,它会响应一个,并发送位置为/welcome/login/

然后我的浏览器重定向到,https://example.com/welcome/login/而不是我试图重定向到的https://example.com/foo/welcome/login/

由于未提取所需资源,因此最终导致网页加载失败。

我按照 apache 文档来执行此操作,如下所示:

path 是本地虚拟路径的名称;url 是远程服务器的部分 URL。这些参数的使用方式与 ProxyPass 指令相同。

例如,假设本地服务器有地址http://example.com/;然后

ProxyPass         "/mirror/foo/" "http://backend.example.com/"
ProxyPassReverse  "/mirror/foo/" "http://backend.example.com/"
ProxyPassReverseCookieDomain  "backend.example.com"  "public.example.com"
ProxyPassReverseCookiePath  "/"  "/mirror/foo/"

不仅会引起本地请求http://example.com/mirror/foo/bar在内部转换为代理请求http://backend.example.com/bar(ProxyPass 在此处提供的功能)。它还负责处理服务器 backend.example.com 在重定向时发送的重定向http://backend.example.com/barhttp://backend.example.com/quux. Apache httpd 将其调整为http://example.com/mirror/foo/quux在将 HTTP 重定向响应转发给客户端之前。请注意,用于构建 URL 的主机名是根据 UseCanonicalName 指令的设置来选择的。

在部分内使用时,第一个参数被省略,并从中获取本地目录。在部分内也会发生同样的情况,但可能不会按预期工作,因为 ProxyPassReverse 会将正则表达式逐字解释为路径;如果在这种情况下需要,请在部分外或单独的部分中指定 ProxyPassReverse。

查看 Apache 文档时,似乎已经考虑到了这一确切情况,但是它失败了,有什么建议吗?

相关内容