ショコラ
Nginx サーバー証明書を取得して、リバースプロキシを立てるには?
Nginxコンテナ に Lets encrypt をインストールしてキメマス。
もっさん先輩
手順
Nginxコンテナ を起動して SSL を取得。取得した SSL でリバースプロキシを立てる手順。
- ドッカーファイルを作成します。
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
- ドッカーファイルをビルドします。
docker build . -t reverse-proxy
- コンテナを起動します。
docker run -p 80:80 --name nginx -it reverse-proxy bash
- certbotコマンド でサーバー証明書を取得します。
certbot certonly -d answorz.com -m mossan@answorz.com
- サーバー証明書を取得したら、Ctrl+p → Ctrl+q でコンテナから出ます。
- コンテナ内にある設定ファイルをボリュームにコピーします。
docker cp nginx:/etc/letsencrypt ./volume/etc
docker cp nginx:/etc/nginx ./volume/etc
- 一旦、コンテナを削除します。
docker rm -f nginx
- ボリュームに以下のような設定ファイルを作成します。
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 には取得したサーバー証明書を設定する。
- 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
以上