我在我的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 顺序的任何内容。
即使谷歌也无法返回任何解决方案,或者可能是我无法正确提出问题。
如果其他人可以为这个答案添加更多技术解释,那就太好了。