0
0

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 3 years have passed since last update.

Docker CentOS8にnginxを入れてSSL化してみた

Posted at

概要

Docker CentOS8にnginx入れてみたにSSL化を追加した拡張版になります。
mkcertを利用して、ローカルのPCに認証局を立て、そこで署名を行った証明書をSSLに利用するようになります。
また、コマンドの実行を極力無くすをモットーに、起動コマンドもシェルで作成していますので環境構築はシステムに不慣れな方でも大丈夫!
と、願っています(笑)

環境

  • maxOS BigSur 11.2.3
  • Docker version 20.10.6
  • docker-compose version 1.29.1
  • Homebrew 3.1.11

構成

.
├── docker
│   └── app
│       ├── Dockerfile
│       └── nginx
│           ├── certs
│           │   ├── localhost+1-key.pem
│           │   └── localhost+1.pem
│           └── conf.d
│               └── default.conf
├── docker-compose.yml
├── up.sh
└── web
    └── index.html

手順

1. docker-compose.yml作成

docker-compose.yml
version: "3.9"
services:
  app:
    build:
      context: ./docker/app
    volumes:
      - ./web:/web
      - ./docker/app/nginx/conf.d:/etc/nginx/conf.d
      - ./docker/app/nginx/certs:/etc/nginx/certs
    ports:
      - "80:80"
      - "443:443"

ボリューム
それぞれのボリュームは以下の用途です。

  • web => ウェブコンテンツ
  • conf.d => nginxのconf
  • certs => 証明書と秘密鍵

ポート
ssl化するために、443ポートもマッピングするようにしています。

2. Dockerfile作成

CentOS8の公式イメージを基にして、nginxをインストールしています。

Dockerfile
FROM centos:centos8

RUN dnf -y update && \
    dnf install -y nginx

CMD ["nginx", "-g", "daemon off;"]

WORKDIR /web

3. nginxのconf設定

HTTPアクセスはHTTPSにリダイレクトさせ、HTTPSでは証明書と秘密鍵をそれぞれ読み込むようにしています。

server {
    listen      80;
    server_name localhost;
    return 301  https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name  localhost;

    ssl_certificate /etc/nginx/certs/localhost+1.pem;
    ssl_certificate_key /etc/nginx/certs/localhost+1-key.pem;

    location / {
        root   /web;
        index  index.html index.htm;
    }
}

4. 起動用のシェル作成

SSL化のためにmkcertを利用します。

up.sh
#!/bin/sh

brew install mkcert nss
mkcert -install
mkcert -cert-file ./docker/app/nginx/certs/localhost+1.pem -key-file ./docker/app/nginx/certs/localhost+1-key.pem localhost 127.0.0.1

docker-compose up -d

5. その他

5-1. index.html

今回は、動作確認用のindex.htmlを用意します。
(nginxのデフォルトページは、混合コンテンツのため。)

index.html
<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="UTF-8">
	<title>テスト</title>
</head>
<body>
<p>test</p>
</body>
</html>

5-2. .gitignore

蛇足ですが、ローカル用の証明書と秘密鍵をgitにあげなくていいように設定します。

.gitignore
docker/app/nginx/certs/

6. 確認

6-1. 起動

sh up.sh

6-2. nginx確認

https://localhost/ にChromeでアクセスしてみましょう。
通信が保護されていたらOKです。

スクリーンショット 2021-06-11 15.27.52.png

6-3. 停止

docker-compose down

最後に

本当はdocker内でmkcertを利用するように頑張ったのですが、どうやらローカル上で認証局を立てないとブラウザで確認する際に有効な証明書として認識してもらえず断念しました。
何かいい方法をご存知の方がいれば、ぜひアドバイスください。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?