我正在尝试使用 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/bar到http://backend.example.com/quux. Apache httpd 将其调整为http://example.com/mirror/foo/quux在将 HTTP 重定向响应转发给客户端之前。请注意,用于构建 URL 的主机名是根据 UseCanonicalName 指令的设置来选择的。
在部分内使用时,第一个参数被省略,并从中获取本地目录。在部分内也会发生同样的情况,但可能不会按预期工作,因为 ProxyPassReverse 会将正则表达式逐字解释为路径;如果在这种情况下需要,请在部分外或单独的部分中指定 ProxyPassReverse。
查看 Apache 文档时,似乎已经考虑到了这一确切情况,但是它失败了,有什么建议吗?