![具有类似部分 URL 的 Apache 反向代理路由](https://linux22.com/image/774181/%E5%85%B7%E6%9C%89%E7%B1%BB%E4%BC%BC%E9%83%A8%E5%88%86%20URL%20%E7%9A%84%20Apache%20%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86%E8%B7%AF%E7%94%B1.png)
我在我的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 顺序的任何内容。
即使谷歌也无法返回任何解决方案,或者可能是我无法正确提出问题。
如果其他人可以为这个答案添加更多技术解释,那就太好了。