Apache-2.4

具有相似部分 url 的 Apache 反向代理路由

  • January 21, 2022

我在我的 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,-.

引用自:https://serverfault.com/questions/1090441