バックエンドサービスへのApacheプロキシ

バックエンドサービスへのApacheプロキシ

同じサーバー上の複数のバックエンド サービスのプロキシとして機能する Apache Web サーバー (Linux) の設定ファイルを作成する必要があります。各バックエンド サービスは、別々のポートで systemd サービスとして実行されています。

confファイルには次の内容が含まれています

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

??? – URLの一部となるリクエストパラメータを参照します。これをconfでどのように定義すればよいですか?どのような表現を使用する必要がありますか?

答え1

いくつかのアプローチが可能です。

  1. ProxyPassディレクティブを正しい順序で囲みますLocationMatch指令; 次のようなもの

    <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. mod_rewriteを使用するリバースプロキシ[P]パターン マッチングを可能にするには、ProxyPass ディレクティブではなくtarget を使用します。

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

関連情報