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.
Adjunte las directivas ProxyPass en orden correcto
LocationMatch
directivas; 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>
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]