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.
Coloque as diretivas ProxyPass em ordem correta
LocationMatch
diretivas; 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>
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]