apache 反向代理不工作

apache 反向代理不工作

我正在使用 Apache 容器作为反向代理,并尝试访问我的一个 VM 服务。当我进行如下配置时,它就可以正常工作:

ProxyPassMatch "^/(.*)$" "https://host1:443/$1"
ProxyPassReverse "^/(.*)$" "https://host1:443/$1"

使用上述配置,我可以访问 https://host1:443/* 的所有 URL。但是当我想通过显式 Worker 访问时,

ProxyPassMatch "^/sample/(.*)$" "https://host1:443/$1"
ProxyPassReverse "^/sample/(.*)$" "https://host1:443/$1

它说“在此服务器上找不到请求的 URL /p/login/。”我尝试了很多解决方案,但无法工作。

答案1

ProxyPassMatch "^/sample/(.*)$" "https://host1:443/$1"

/sample/当您仅反向代理到 host1 时,以 的请求开头的 URI 路径/p/login/ 不应被转发。 的请求/p/login/ 将由您的 apache 本地处理,不会到达 host1。

当该路径/URI 不存在于你的 Apache 容器中时,会触发 404 - 文件未找到错误“该服务器上未找到所请求的 URL /p/login/。”

您通常会收到这样的错误,因为 host1 上的 HTML 代码链接到绝对路径 /p/login/,而一个常见的误解是反向代理会/sample/p/login/通过使用ProxyPassReverse指令。ProxyPassReverse不会这样做。它只会调整 中的 URL LocationContent-Location并且URI 标题;并且不在正文/HTML 代码中。

有几种方法可以解决这个问题;详情见这个答案(请注意,您的问题和答案都标有 apache 版本2.2;该问题中的另外两个答案为当前版本提供了解决方案2.4

相关内容