nginx Reverse Proxy on Docker
Why we use nginx reverse proxy
昨今、多くのサービス、システムで Microservices Architecture (MSA) が採用されるようになっています。 MSA では各アプリケーション(サービス)は独立した Web アプリケーションとして構築・配置されます。 利用ユーザーはあくまでサービスの集合を”アプリケーション” として利用しているため、利用ユーザーがアクセスする URL は1つに統合されているべきです。 また、各 Web アプリケーションごとに DNS の設定や、SSL 証明書の設定、管理などの運用作業の負荷は思いのほか高く、またミスによる障害が発生する要因ともなります。 このような課題に対応するために Reverse Proxy を利用します。 この記事では Reverse Proxy を nginx (軽量な Web Server)を利用して、Docker Container として稼働させる方法について説明します。
What is pass proxy
この記事では nginx の Reverse Proxy 機能の中でも “pass proxy” の設定について説明します。 pass proxy でどのように Web アプリケーションにアクセスするのかは下記の図を参照してください。 ここでは www.eshop.com というアドレスとルートパスによって各アプリケーションに HTTP リクエストを Porxy するようにしています。
Applciation | Application Address | Proxy Address |
---|---|---|
Catalog | 10.0.0.1 | https://www.eshop.com/catalog |
Basket | 10.0.0.2 | https://www.eshop.com/basket |
Order | 10.0.0.3 | https://www.eshop.com/order |
How to configure nginx.
nginx pass proxy の設定は nginx.conf ふぃあるに記述します。 下記はサンプルです。
設定は下記の通りです。 * server セクション で nginx サーバーの DNS 名を指定します。 * location セクションに HTTP 要求のパスを記載します。 * proxy_pass セクションに Porxy する Web アプリケーションの IP アドレスを指定します。
この設定により、各アプリケーションの IP アドレスを外部に公開する必要がなくなります。
e.g. Pass proxy from www.eshop.com to 10.0.0.1
http { include /etc/nginx/mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server{ server_name www.eshop.com; proxy_set_header Host $http_host; location /catalog/ { proxy_pass http://10.0.0.1/; } } }
How to run nginx pass proxy
nginx を Docker Container として実行するには下記のコマンドを利用します。(簡単!)
docker run --name nginx-pass-proxy -v ./nginx.conf:/etc/nginx/nginx.conf:ro -d nginx
次回以降は、
について記事にしたいと思います。