ウェブサーバを稼働させた複数のコンテナに、既定のポートでアクセスできるようにする<リバースプロシキ>の設定を示します。
検証
- ・
- OS:CentOS 7
- ・
- コンテナ:Docker 1.13
- ・
- ウェブサーバ:Apache (Docker Hub)
- ・
- ウェブサーバ:nginx (Docker Hub)
ウェブのリバースプロキシ
ウェブサーバを稼働させた複数のコンテナがあるとき、これらに外からアクセスしたい場合があります。
しかしそのためには、それぞれのウェブサーバのポート番号を、たがいに重複しないよう変えるしかありませんーーつまり、既定のポート番号(80/TCP, 443/TCP )で、すべてのウェブサーバにはアクセスできない、ということです。
このような場合、ウェブのリバースプロキシサーバ(代理サーバ)を間にはさむことで、すべてのウェブサーバに、既定のポートでアクセスできるようになります。
ウェブのリバースプロキシとしてよく使われるアプリに、nginx があります。[※1][※2]
- ※1
- 同じようなことは、ウェブサーバ側の仮想ドメイン設定でも行えますが……コンテナ+リバースプロシキの利点は、たとえば複数のウェブサイトが利用するアプリケーションの競合をふせぐことができる、といった点にあります。
- ※2
- このnginx は、ロシアのシソエフ氏が開発したものなので、(シソエフ氏の引退後も)開発はロシアで行っていました。2022年のロシアによるウクライナ侵攻により、サポートの継続が危ぶまれていましたが、開発チームが国外に出ることで、安定性は保証されたようです:
- ・
- https://www.publickey1.jp/blog/22/f5nginx.html
設定〜起動
たとえば、次のように設定〜起動します:[※1]
- ・
- 設定:リバースプロキシ側(nginx )
server { server_name <HOST_001>.<DOMAIN>; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://cnt911:8081/; } } server { server_name <HOST_002>.<DOMAIN>; location / { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://cnt912:8082/; } }
- ・
- 起動:コンテナ側(docker):
$ docker run -d -p 8081:80 --net net101 --name cnt911 ... httpd:... $ docker run -d -p 8082:80 --net net101 --name cnt912 ... httpd:... $ docker run -d -p 80:80 --net net101 --name cnt901 ... nginx:...
- ※1
- コンテナのバージョンによっては、ホスト名は「-h | --hostname 」で指定できます。