Apache-Proxy zu Back-End-Diensten

Apache-Proxy zu Back-End-Diensten

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.

  1. Schließen Sie die ProxyPass-Anweisungen in der richtigen Reihenfolge ein.LocationMatchRichtlinien; 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>
    
  2. 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]
    

verwandte Informationen