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反向代理目标[P]而不是 ProxyPass 指令来允许模式匹配。

     RewriteRule    "^/api/policies/(.*)/coverages/(.*)"  "http://127.0.0.1:6002/"  [P]
     RewriteRule    "^/api/policies/(.*)/premiums/(.*)"  "http://127.0.0.1:6003/"  [P]
    

相关内容