Help us understand the problem. What is going on with this article?

nginxを使ったリバースプロキシ on Docker

はじめに

Dockerを使っていく上でほぼ必須なリバースプロキシを構築します。
今回は素晴らしいコンテナが有ったので1からビルドせずそれを利用させてもらいます。

jwilder/nginx-proxy
https://hub.docker.com/r/jwilder/nginx-proxy/

このコンテナの素晴らしい所は同じネットワーク内にVIRTUAL_HOSTを指定して
コンテナを起動すればそれだけでリバースプロキシしてくれる所です。
confファイルの都度編集は不要です。

事前準備

ディレクトリ構成

私はこんな感じに組みましたが環境に合わせてカスタマイズして下さい。

/etc
└docker-compose.d
 ├certs
 │├mydomain.com.crt
 │└mydomain.com.key
 ├proxy
 │└docker-compose.yml
 └service.name
  └docker-compose.yml

certsディレクトリ

certsディレクトリにはSSL証明書を入れます。
mydomain.com.crt、mydomain.com.keyは自社ドメインに合わせてリネームして下さい。
今回はワイルドカード証明書を使うのでドメイン名だけでOKです。
もしサービス毎の証明書を使用する場合は
servicename.mydomain.com.crt
servicename.mydomain.com.key
等で個別に作成して下さい。

proxyディレクトリ

ここにリバースプロキシ用docker-compose.ymlを作成します。

その他

proxyディレクトリと同列にサービス用ディレクトリを作成し
docker-compose.ymlをガンガン作っていきます。

リバースプロキシ

/etc/docker-compose.d/proxy/docker-compose.yml
version: '2'
# proxy
services:

  proxy:
    image: jwilder/nginx-proxy
    container_name: nginx-proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /etc/docker-compose.d/certs:/etc/nginx/certs
      - /var/run/docker.sock:/tmp/docker.sock:ro
    restart: always

networks:
  default:
    external:
      name: common_link

ポイント

今回サービス毎にdocker-compose.ymlを作成するのでネットワークを指定しています。
サービス用のdocker-compose.ymlと同じネットワークを指定して下さい。

サービス用(例)

/etc/docker-compose.d/service.name/docker-compose.yml
version: '2'
# service
services:

  web:
    image: nginx
    container_name: web
    environment:
      VIRTUAL_HOST: web.mydomain.com
    restart: always

networks:
  default:
    external:
      name: common_link

共通ネットワークの作成

docker-compose.ymlで指定したcommon_linkを作成します。

docker network create --driver bridge common_link

動作確認

コンテナを立ち上げる順番はproxyが先でもサービスが先でも大丈夫です。
proxyとサービスをdocker-compose up -dして下さい。
ブラウザからhttps://web.mydomain.comへアクセス出来れば成功です。
証明書が正しく読み込まれていればhttpでアクセスしてもhttpsへリダイレクトされます。
もしhttpでしか繋がらない場合は証明書に問題が有る可能性が高いです。

追記2017/1/12

このリバースプロキシはデフォルトで100MBまでしかファイル転送できません。
必要が有れば下記の様にDockerfileを作成しビルドして下さい。
下記例では10GBまで拡張しています。

FROM jwilder/nginx-proxy
RUN { \
      echo 'server_tokens off;'; \
      echo 'client_max_body_size 100g;'; \
    } > /etc/nginx/conf.d/my_proxy.conf

最後に

この様な素晴らしいコンテナを提供してくれているjwilderさんに感謝です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした