Proxy Apache para serviços de back-end

Proxy Apache para serviços de back-end

Preciso criar um arquivo conf para o servidor web apache (Linux), que atuará como proxy para vários serviços de back-end no mesmo servidor. Cada serviço de back-end está sendo executado como serviço systemd em portas separadas.

O arquivo conf contém o seguinte

<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>

??? – refere-se ao parâmetro de solicitação que fará parte da url. Como defino isso no conf? que tipo de expressão precisa ser usada

Responder1

Várias abordagens são possíveis.

  1. Coloque as diretivas ProxyPass em ordem corretaLocationMatchdiretivas; algo na linha de

    <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. Utilize o mod_rewriteproxy reversotarget [P]em vez de diretivas ProxyPass para permitir a correspondência de padrões.

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

informação relacionada