Nginx サーバー証明書を取得して、リバースプロキシを立てるには?

ショコラ
ショコラ

Nginx サーバー証明書を取得して、リバースプロキシを立てるには?

Nginxコンテナ に Lets encrypt をインストールしてキメマス。

もっさん先輩
もっさん先輩

手順

Nginxコンテナ を起動して SSL を取得。取得した SSL でリバースプロキシを立てる手順。

  1. ドッカーファイルを作成します。
FROM nginx:latest
RUN apt-get update
RUN apt-get install -y procps iputils-ping net-tools vim certbot
RUN echo 'set clipboard=unnamed,autoselect' > /root/.vimrc
CMD /usr/sbin/nginx; tail -f /dev/null

apt-get で以下のコマンドをインストールしています。
①procps → free, kill, pgrep, pkill, pmap, ps, pwdx, skill, slabtop, snice, sysctl, tload, top, uptime, vmstat, w, watch
②iputils-ping → ping
③net-tools → arp , ifconfig , netstat , rarp , route

  1. ドッカーファイルをビルドします。
docker build . -t reverse-proxy
  1. コンテナを起動します。
docker run -p 80:80 --name nginx -it reverse-proxy bash
  1. certbotコマンド でサーバー証明書を取得します。
certbot certonly -d answorz.com -m mossan@answorz.com
  1. サーバー証明書を取得したら、Ctrl+p → Ctrl+q でコンテナから出ます。
  1. コンテナ内にある設定ファイルをボリュームにコピーします。
docker cp nginx:/etc/letsencrypt ./volume/etc
docker cp nginx:/etc/nginx ./volume/etc
  1. 一旦、コンテナを削除します。
docker rm -f nginx
  1. ボリュームに以下のような設定ファイルを作成します。
server {
  listen 80 default_server;
  server_name answorz.com;
  if ($http_x_forwarded_proto != https) {
    rewrite ^(.*)$ https://answorz.com$1 permanent;
  }
}
server
{
  listen 443 default_server;
  server_name answorz.com;

  proxy_redirect off;
  proxy_set_header Host               $host;
  proxy_set_header X-Forwarded-Host   $host;
  proxy_set_header X-Forwarded-Server $host;
  proxy_set_header X-Real-IP          $remote_addr;
  proxy_set_header X-Forwarded-For    $remote_addr;
  proxy_set_header X-Forwarded-Proto  $scheme;
  proxy_http_version 1.1;

  location / {
    proxy_pass http://{バックエンド};
  }

  ssl on;
  ssl_certificate     /etc/letsencrypt/live/answorz.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/answorz.com/privkey.pem;
  ssl_prefer_server_ciphers on;
}

①http は https に転送する。
②ssl_certificate、ssl_certificate_key には取得したサーバー証明書を設定する。

  1. docker-composeファイルを作成して起動します。
version: '3'
services:
  nginx:
    image: reverse-proxy
    ports:
      - 80:80
      - 443:443
    volumes:
      - ./volume/etc/nginx:/etc/nginx
      - ./volume/etc/letsencrypt:/etc/letsencrypt

以上

Scroll to Top