Apache-2.4
具有相似部分 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 無法訪問,而當只保留單個反向代理路由時它可以正常工作。
這很明顯,我實際上可以在提出這個問題時得到它:)
在這種情況下,重要的是放置這些映射的順序。
#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 順序的資訊。
甚至Google也無法返回任何解決方案,或者我可能無法正確地提出問題。
如果其他人可以為這個答案添加更多技術解釋,那就太好了。
編輯:在https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#:~:text=ordering%20or%20override.-,Ordering%20ProxyPass%的文件中有一個明確的說明 20Directives,URL.%20Note%20that%20there%20is%20some%20relation%20with%20worker%20sharing,-.