2
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SSL/TLS対応NginxリバースプロキシDockerコンテナ

Last updated at Posted at 2022-01-05

背景

WebフロントエンドにNginx Proxyを使用してバックエンドのコンテンツをLet’s Encryptの無償SSL/TLS証明書によるHTTPSサービス化をDockerコンテナで簡単に作成するメモ書きです。
Dockerを使用しない過去投稿は以下です。

使用環境

  • Linuxサーバー
  • Docker
  • Docker Compose 2.0
  • 独自ドメイン名の取得
  • 独自ドメイン名のDNSサーバーへのAレコードの登録
  • Firewall(セキュリティグループ)設定で外部(0.0.0.0/0)からHTTP(TCP/80)とHTTPS(TCP/443)サービスポートの開放

Docker Composeインストール環境については以下のページにも記載しています。

nginx-proxyコンテナ

Webフロントエンドに配置するNginx ProxyコンテナのDocker Compose設定は公式サイトを参考にしています。

作業用ディレクトリの作成

適当なディレクトリを作成して移動します。

$ mkdir -p nginx-proxy
$ cd nginx-proxy

Docker Composeファイルの作成

Docker Composeの設定ファイル(docker-compose.yaml)を作成します。

nginx-proxy/docker-compose.yaml
version: '2'

services:

  nginx-proxy:
    image: nginxproxy/nginx-proxy
    container_name: nginx-proxy
    ports:
      - 80:80
      - 443:443
    volumes:
      - conf:/etc/nginx/conf.d
      - certs:/etc/nginx/certs:ro
      - vhost:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - /var/run/docker.sock:/tmp/docker.sock:ro
    environment:
      DEFAULT_HOST: www.yourdomain.tld
      HTTPS_METHOD: noredirect
    restart: always

  acme-companion:
    image: nginxproxy/acme-companion
    container_name: nginx-proxy-acme
    volumes_from:
      - nginx-proxy
    volumes:
      - certs:/etc/nginx/certs:rw
      - acme:/etc/acme.sh
      - /var/run/docker.sock:/var/run/docker.sock:ro
    restart: always

volumes:
  conf:
  certs:
  vhost:
  html:
  acme:

この例ではDockerコンテナ2個(nginx-proxy,nginx-proxy-acme)の構成になります。
独自ドメイン名の指定は「DEFAULT_HOST:」の項目で設定します。
Let’s EncryptのSSL/TLS証明書の自動更新設定ではHTTP(TCP/80)サービスが使用されますので、リダイレクトしないように「HTTPS_METHOD: noredirect」項目を設定しています。

Dockerコンテナの作成と起動

docker composeコマンドでDockerコンテナの作成とサービスを起動させます。

$ docker compose up -d

初回はDockerHubから各imageがpull(ダウンロード)して来てからDockerコンテナが作成されてサービスが起動しますので、しばらく待ちます。

$ docker compose ps
NAME                COMMAND                  SERVICE             STATUS              PORTS
nginx-proxy         "/app/docker-entrypo…"   nginx-proxy         running             0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, :::80->80/tcp, :::443->443/tcp
nginx-proxy-acme    "/bin/bash /app/entr…"   acme-companion      running

Dockerコンテナが作成されてサービスが起動した事が分かります。

バックエンドコンテナ

Webフロントエンドから利用されるバックエンドのコンテンツ側のDockerコンテナを用意します。
Docker Composeの設定で必要なのは主に3項目です。

docker-compose.yaml
    environment:
      VIRTUAL_HOST: www.yourdomain.tld
      VIRTUAL_PROTO: http
      LETSENCRYPT_HOST: www.yourdomain.tld
      LETSENCRYPT_EMAIL: user@mail

独自ドメイン名の指定は「DEFAULT_HOST:」の項目で設定します。
Let’s Encryptのドメイン名指定は「LETSENCRYPT_HOST:」の項目で設定します。
また、「LETSENCRYPT_EMAIL:」に連絡先のメールも記載します。

docker-compose.yaml
networks:
  default:
    external:
      name: nginx-proxy_default

Nginx Proxyコンテナ側とDocker Networkを経由して共有設定します。

コンテンツ側のDockerコンテナを起動します。

$ docker compose up -d

動作確認

Webブラウザでコンテンツが表示されるか確認します。
また、以下のコマンドでLet’s EncryptのSSL/TLS証明書の確認が出来ます。

$ docker exec nginx-proxy-acme /app/cert_status

Let’s EncryptのSSL/TLS証明書の更新確認も出来ます。

$ docker exec nginx-proxy-acme /app/force_renew

Let’s Encryptの証明書自動更新

特に設定する事なく証明書は自動更新されるようにDockerコンテナが作成されています。証明書は1時間毎に検証されて60日以内で更新されるとの事です。

2
13
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
2
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?