Ich muss eine Konfigurationsdatei für den Apache-Webserver (Linux) erstellen, die als Proxy für mehrere Backend-Dienste auf demselben Server fungiert. Jeder Backend-Dienst läuft als systemd-Dienst auf separaten Ports.
Die conf-Datei enthält folgendes
<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>
??? – bezieht sich auf den Anforderungsparameter, der Teil der URL sein wird. Wie definiere ich dies in der Konfiguration? Welche Art von Ausdruck muss verwendet werden?
Antwort1
Es sind mehrere Ansätze möglich.
Schließen Sie die ProxyPass-Anweisungen in der richtigen Reihenfolge ein.
LocationMatch
Richtlinien; etwas in der Art von<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>
Verwenden Sie den mod_rewriteReverseproxyZiel-
[P]
anstelle von ProxyPass-Direktiven, um Mustervergleiche zu ermöglichen.RewriteRule "^/api/policies/(.*)/coverages/(.*)" "http://127.0.0.1:6002/" [P] RewriteRule "^/api/policies/(.*)/premiums/(.*)" "http://127.0.0.1:6003/" [P]