🐥

nginxのリバプロをssl化

2021/08/17に公開

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