具有类似部分 URL 的 Apache 反向代理路由

具有类似部分 URL 的 Apache 反向代理路由

我在我的docker容器(apache)中设置了这个简单的反向代理,每个代理都通过两个不同的docker容器映射到不同的微服务。

#serviceOne 
ProxyPass /abc/xyz/ http://serviceOne:8080/abc/xyz/ Keepalive=On
ProxyPassReverse /abc/xyz/ http://serviceOne:8080/abc/xyz/


#servicetwo 
ProxyPass /abc/xyz/pqr/ http://servicetwo:8080/abc/xyz/pqr/ Keepalive=On
ProxyPassReverse /abc/xyz/pqr/ http://servicetwo:8080/abc/xyz/pqr/

有了这个,我无法访问第二个服务中的任何相对路由,例如 /abc/xyz/pqr/testprocess 无法访问,而当仅保留单个反向代理路由时它可以正常工作。

答案1

这是非常明显的,我实际上在构思这个问题时就能理解这一点:)

在这种情况下,重要的是这些映射的放置顺序。

#servicetwo 
ProxyPass /abc/xyz/pqr/ http://servicetwo:8080/abc/xyz/pqr/ Keepalive=On
ProxyPassReverse /abc/xyz/pqr/ http://servicetwo:8080/abc/xyz/pqr/

#serviceOne 
ProxyPass /abc/xyz/ http://serviceOne:8080/abc/xyz/ Keepalive=On
ProxyPassReverse /abc/xyz/ http://serviceOne:8080/abc/xyz/

只需改变这两个映射的顺序即可解决问题。

虽然这很明显,但我在 apache 文档中找不到有关反向代理 URL 顺序的任何内容。

即使谷歌也无法返回任何解决方案,或者可能是我无法正确提出问题。

如果其他人可以为这个答案添加更多技术解释,那就太好了。

编辑:文档中对此有明确的说明 https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#:~:text=ordering%20or%20override.-,Ordering%20ProxyPass%20Directives,URL.%20请注意,其中存在一些与 worker%20sharing 相关的关系,-。

相关内容