🐥
nginxのリバプロをssl化
nginxのリバプロをssl化
- アプリケーションやサイトへの接続をhttpsにしたいことがある
- アプリケーションの前にnginxを前段に置いたリバプロ構成を使うと汎用的に使える
- ssl証明書はlet's enctryptでサクッと取る(legoでワイルドカード証明書
設定
- こういう構成
myproject$ tree
.
├── docker-compose.yml
├── nginx
│ ├── Dockerfile
│ ├── lego
│ │ ├── accounts
│ │ └── certificates
│ │ ├── _.mydomain.com.crt
│ │ └── _.mydomain.com.key
│ └── server.conf
└── README.md
- legoはこうする
# docker実行でacmeチャレンジでssl証明書を取得
docker run -v $PWD/lego:/.lego -it goacme/lego --email="mymail@example.com" --domains="*.mydomain.com" --dns manual -k rsa2048 run
# 実行するとDNSにTXTレコードを入れるよう指示があるので入れる
# 例_acme-challenge.mydomain.com. 120 IN TXT "some_text"
# txtレコードが解決できるようになったらenter
#ファイルのパーミッションがdocker内のユーザのものになってるので直す
sudo chmod -R ユーザー:グループ lego
- docker-compose
docker-compose.yml
version: '3'
services:
nginx:
build:
context: nginx
ports:
- '9000:443'
- Dockerfileのある階層の以下にADDするファイル類を持ってくるのがcontext解決のコツ
Dockerfile
FROM nginx:latest
ADD lego/certificates/_.mydomain.com.crt /etc/nginx/ssl/fullchain.pem
ADD lego/certificates/_.mydomain.com.key /etc/nginx/ssl/privkey.pem
ADD server.conf /etc/nginx/conf.d/default.conf
- server.confで443 sslなど設定を入れるとsslになる
server.conf
server{
listen 443 ssl;
server_name mydomain.com;
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
location / {
proxy_pass http://proxy先のアプリ:port番号;
}
}
- これで httpsでmydomain.com へアクセスできる
Discussion