Proxy Apache para servicios back-end

Proxy Apache para servicios back-end

Necesito crear un archivo de configuración para el servidor web Apache (Linux), que actuará como proxy para múltiples servicios back-end en el mismo servidor. Cada servicio de backend se ejecuta como servicio systemd en puertos separados.

El archivo conf contiene lo siguiente

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

??? – se refiere al parámetro de solicitud que será parte de la URL. ¿Cómo defino esto en la configuración? ¿Qué tipo de expresión se debe utilizar?

Respuesta1

Son posibles varios enfoques.

  1. Adjunte las directivas ProxyPass en orden correctoLocationMatchdirectivas; algo parecido a

    <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. Utilice el mod_rewriteproxy inversodirectivas target [P]en lugar de ProxyPass para permitir la coincidencia de patrones.

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

información relacionada