我需要為 apache Web 伺服器(Linux)建立一個conf文件,它將充當同一伺服器上多個後端服務的代理。每個後端服務都作為 systemd 服務在單獨的連接埠上運行。
conf 檔案包含以下內容
<VirtualHost: *:80>
ProxyPass /api/policies/??? http://127.0.0.1:6001/
ProxyPassReverse /api/policies/??? http://127.0.0.1:6001/
ProxyPass /api/policies/???/coverages http://127.0.0.1:6002/
ProxyPassReverse /api/policies/???/coverages http://127.0.0.1:6002/
ProxyPass /api/policies/???/premiums http://127.0.0.1:6003/
ProxyPassReverse /api/policies/???/coverages http://127.0.0.1:6003/
</VirtualHost>
??? – 指的是請求參數,它將成為 url 的一部分 我如何在 conf 中定義它?需要使用什麼樣的表達方式
答案1
有幾種方法是可能的。
以正確的順序包含 ProxyPass 指令
LocationMatch
指令;類似的東西<LocationMatch "/api/policies/(.*)/coverages"> ProxyPass http://127.0.0.1:6002/ # ... </LocationMatch> <LocationMatch "/api/policies/(.*)/premiums"> ProxyPass http://127.0.0.1:6003/ # ... </LocationMatch> <Location "/api/policies/"> ProxyPass http://127.0.0.1:6001/ # ... </Location>
使用mod_rewrite反向代理target
[P]
而不是 ProxyPass 指令來允許模式匹配。RewriteRule "^/api/policies/(.*)/coverages/(.*)" "http://127.0.0.1:6002/" [P] RewriteRule "^/api/policies/(.*)/premiums/(.*)" "http://127.0.0.1:6003/" [P]