複数の異なる Docker 化された HTTPS サービスのリバース プロキシ

複数の異なる Docker 化された HTTPS サービスのリバース プロキシ

私には 2 つのサービスがあり、どちらもきちんと Docker 化されており、それぞれ独自の を持っていますdocker-compose.yml

各サービスには独自のドメイン名があります。

どちらのサービスも HTTPS を使用し、Lets Encrypt 証明書を持っています。

どちらのサービスも完全に自己完結型で、80 と 443 でリッスンします。

.--[http]-[https]--.    .--[http]-[https]--.
|                  |    |                  |
|    Service A     |    |    Service B     |
|                  |    |                  |
'------------------'    '------------------'

同じホスト上で両方のサービスを起動できるようにリバース プロキシを設定するにはどうすればよいですか?

.--------------[http]-[https]--------------.
|                                          |
|              REVERSE PROXY               |
|                                          |
'---+--------+---------------+--------+----'
    |        |               |        |
   http     https           http     https
   req.     req.            req.     req.
   domainA  domainA         domainB  domainB
     |        |              |        |
     V        V              V        V
.--[http]-[https]--.    .--[http]-[https]--.
|                  |    |                  |
|    Service A     |    |    Service B     |
|                  |    |                  |
'------------------'    '------------------'

サービスを自己完結型にしておきたいです。つまり、サービス コンテナーから証明書を抽出しないようにしたいのです。

私の実験によると、nginxは証明書なしでHTTPSリクエストを転送できないようですが、そうみたいですこれを実現することは可能だと思います。おそらく他のリバース プロキシ ソフトウェアを使用すれば実現できるのではないでしょうか。

両方のサービスが制御できますdocker-compose.yml。必要に応じてポートなどを変更することもできます。

理想的には、次のような設定を受け入れるシンプルなデーモンを見つけたいです。

[service a]
domain: domainA.tld
localPort: 8080

[service b]
domain: domainB.tld
localPort: 8081

必死に探しましたが、そのようなツールは見つかりませんでした。

答え1

あなたはjwilder/nginx-プロキシは、自動化されたリバース プロキシ機能を提供し、簡単な docker-compose 統合が付属しています (サービスが実行されているポートとサービスが利用可能になるドメインという、いくつかの環境変数を指定するだけです)。

Let's Encryptの証明書生成を自動化することもできます。jrcs/letsencrypt-nginx-プロキシコンパニオン

関連情報