Nginx リバース プロキシでは、トラフィックを Docker ホスト マシンにリダイレクトするときに内部ポートが機能する必要があります。

Nginx リバース プロキシでは、トラフィックを Docker ホスト マシンにリダイレクトするときに内部ポートが機能する必要があります。

私はLinuxホストマシンで複数のDockerコンテナを実行しており、そのうちの1つとしてNginx プロキシ マネージャー(以下、NPM) は、使いやすい UI を備えた Nginx です。

NPM はポート 80 と 443 を公開し、指定されたプロキシ ルール (従来の一般的なリバース プロキシ構成) に従って各コンテナーにトラフィックをリダイレクトします。すべてのコンテナーはブリッジ Docker ネットワークに接続するように指示されるため、NPM は簡単にコンテナーにアクセスできます。

すべてうまくいきました。今度は、NPM を使用して公開する必要がある新しいサービスがあります。違いは、サービスがコンテナー上ではなくホスト マシン上で実行され、ポート 3711 でアクセスできることです。

調査した結果、この提案に至りました:

extra_hosts:
    - "host.docker.internal:host-gateway"

これを NPM サービスの docker-compose ファイルに追加することで、ホスト マシン上の任意のポートにアクセスできるようになります。実際、NPM コンテナー内から ping を実行すると、host.docker.internal応答が得られました。問題は、いつものようにプロキシ ルールを設定した後、次のようになることです。

ここに画像の説明を入力してください

インターネットから ci-server.domain.com でサービスにアクセスしようとすると、502 が返されます。ただし、ci-server.domain.com:3711 を実行するとアクセスできます。

ドメインに内部ポートを追加する必要があるのはなぜですか?コンテナ上で実行されている他のすべてのサービスは 80/443 に応答し、内部的にポートにリダイレクトされます。

関連情報