LoginSignup
0
0

Nginxのリバースプロキシを実装する[Docker-compose環境]

Posted at

はじめに

私がDocker composeを使ってリバースプロキシを実装するのに苦労したため、その備忘録として残します。また、実験用コンテナのため最小構成で構築されていますので、必要に応じて読み替えてください。
因みにDocker-Composeは勉強し始めて3日なので漏れがあるかも知れませんがあしからず。

本実装の想定図

demo2-image.png

リバプロのコンテナのみ80:80でフォワーディングを行い、WEB1・WEB2に対しては直接アクセスできないように実装を行う。

本編

今回のフォルダ構造は以下の通りにしています

.
├── docker-compose.yml
├── web1
│   ├── dockerfile
│   └── index.html
├── web2
│   ├── dockerfile
│   └── index.html
└── reverse-proxy
    ├── dockerfile.proxy
    └── nginx.conf

まずプロキシされる側のコンテナの設定を行います。
index.htmlは任意のコードを作成してください。

dockerfile
FROM nginx:latest

次にプロキシコンテナの設定を行います。

dockerfile.proxy
FROM nginx:latest

# nginx内のconf置き換え
COPY nginx.conf /etc/nginx/

またnginx.conf

nginx.conf
events {
  worker_connections 1024;
}

http {
  server {
    listen 80;

    location / {
      root /usr/share/nginx/html;
    }

    location /web1/ {
      proxy_pass http://web1/;
    }

    location /web2/ {
      proxy_pass http://web2/;
    }
  }
}

必ずロケーション設定は/<dir_name>/と書くのを忘れないようにしてください。
こうしないとプロキシした際のディレクトリがズレてwebサーバ側のディレクトリ配置が複雑になります。

最後にdocker-composeを記述します。

docekr-compose.yml
version: '3'

services:
  web1:
    build: 
      context: ./web1
      dockerfile: dockerfile
    volumes:
      - ./web1:/usr/share/nginx/html

  web2:
    build: 
      context: ./web2
      dockerfile: Dockerfile
    volumes:
      - ./web2:/usr/share/nginx/html  

  reverse-proxy:
    build:
      context: ./reverse-proxy
      dockerfile: dockerfile.proxy
    ports:
      - 80:80 

この様に記述することでリバプロのみフォワーディングを許可しながら、他のコンテナには直接アクセスができないようになります。また、composeファイルを組むことでコンテナが同一のネットワークに入るので、内部の通信をコンテナ名で解決できるようになります。これによりnginx.confがコンテナ名で指定することが可能となり、コードの複雑化を防ぐことが可能です。

以上で設定は終了しました。docker compose upでログも流れるので挙動の確認も可能です。

終わり

今回のコードは一応GitHubにて公開しています。(他のも混ざっています)
必要とあらばご使用ください。
Docker_Container_demos

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0