MkItYs

MkItYs > ネットワークとサーバを作る > 

images

ウェブのリバースプロキシを設定する:nginx

images

ウェブサーバを稼働させた複数のコンテナに、既定のポートでアクセスできるようにする<リバースプロシキ>の設定を示します。

検証


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 」で指定できます。