Apache 代理到後端服務

Apache 代理到後端服務

我需要為 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

有幾種方法是可能的。

  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>
    
  2. 使用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]
    

相關內容