nginxをすべてのDockerコンテナのリバースプロキシとして使用する

nginxをすべてのDockerコンテナのリバースプロキシとして使用する

私はRaspberry Pi 4でDockerといくつかのコンテナ化されたWebアプリケーションを実行しており、すべてのトラフィックがリバースプロキシでnginxを通過できるようにします。

私の問題は、ネットワーク上のすべてのデバイスからDockerコンテナポートにアクセスできることです。つまり、nginxをバイパスします。

これは私のnginx設定です。

server {
    listen 80;
    server_name myRaspi;

    location /cool {
        proxy_pass         http://127.0.0.1:5000/cool;
        proxy_http_version 1.1;
        proxy_set_header   Upgrade $http_upgrade;
        proxy_set_header   Connection keep-alive;
        proxy_set_header   Connection "Upgrade";
        proxy_set_header   Host $host;
        proxy_cache_bypass $http_upgrade;
        proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header   X-Forwarded-Proto $scheme;
    }
}

ご覧のとおり、http://myRaspi/coolからhttp://localhost:5000/cool(Dockerコンテナ内で実行されているWebアプリケーション)にトラフィックを転送しています。現在、ネットワーク上のすべてのデバイスからhttp://myRaspi/coolおよびhttp://myRaspi:5000/coolにアクセスできます。

フォローするドッカー公式文書以下を設定します。

iptables -I DOCKER-USER -i ext_if ! -s 192.168.174.0/24 -j DROP

sudo iptables --list新しい表示ルールを実行します。
私のすべてのネットワークデバイスがサブネットにあるので、これは192.168.175http://myRaspi/coolとhttp://myRaspi:5000/coolへのすべてのトラフィックが機能しないことを願っています(例外をブロックしたため)192.168.174。中192.168.175)。
残念ながら、この方法は機能しません。それでもhttp://myRaspi/coolとhttp://myRaspi:5000/coolにアクセスできます。

その後、以前sudo rebootに作成されたルールは消え、sudo iptables --listそれ以上含まれなくなります。

私はまだDocker / Linux / nginxネットワーキングの世界に慣れていないので、すべてのトラフィックがnginxをリバースプロキシに渡し、Raspiの外部からコンテナポートにアクセスすることを不可能にするようにDocker / nginxを設定するのを手伝ってくれてありがとう。 。

答え1

私の間違いは、コンテナの起動時にDockerポートを公開する方法にありました。

このようなコンテナを実行する前に、-p 5000:5000これを使用しています-p 127.0.0.1:5000:5000。これによりポートはローカルでのみ公開されるため、http://myRaspi:5000/cool 経由でアクセスできなくなります。手動操作は必要ありませんiptables

関連情報