나도 다른 사람들처럼 Certbot을 이용해서 SSL인증서를 받으려고 했으나, 버전 오류로 실패하고 횟수 제한으로 막히면서 대안으로 ZeroSSL에서 인증서를 받게 됐다.
이분의 글을 읽으며 차근차근 해보니 성공함!
nginx 컨테이너 내부 접속
docker exec -it nginx /bin/bash
nginx 설정 파일 수정
vim /etc/nginx/conf.d/default.conf
bash: vim: command not found
나오면apt-get update
apt-get install vim
default.conf
에 추가
location /.well-known/pki-validation/ {
alias /usr/share/nginx/html/.well-known/pki-validation/;
}
/root
에서 docker-compose.yml
생성 후 내용 추가
version: '3.9'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
- "443:443"
restart: always
volumes:
- ./data/nginx/pki-validation:/usr/share/nginx/html/.well-known/pki-validation
- ./data/nginx/ssl:/etc/ssl/j10a708.p.ssafy.io
./data/nginx/pki-validation
/usr/share/nginx/html/.well-known/pki-validation
💡 쉽게 표현하면 내 컴퓨터의
./data/nginx/pki-validation
경로는 도커 컨테이너의/usr/share/nginx/html/.well-known/pki-validation
경로이다 라는 의미에요.
내 컴퓨터의./data/nginx/pki-validation
경로에 123.txt 파일을 생성하면, nginx 도커 컨테이너 내의/usr/share/nginx/html/.well-known/pki-validation
경로에 123.txt가 생기는거죠~
출처
docker-compose up -d
실행./data/nginx/pki-validation
에 추가ca_bundle.crt
의 내용을 전부 복사해서, certficate.crt
의 맨 끝에 붙여 넣기 하고 저장 -----BEGIN CERTIFICATE-----
어쩌고 저쩌고
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
어쩌고 저쩌고 from ca_bundle.crt
-----END CERTIFICATE-----
./data/nginx/ssl
에 넣기/etc/nginx/conf.d/default.conf
수정 server {
listen 80 default_server;
server_name yourdomain.co.kr;
server_tokens off;
location /.well-known/pki-validation/ {
alias /usr/share/nginx/html/.well-known/pki-validation/; # 도메인 검증 파일이 위치하는 실제 경로로 변경
}
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name yourdomain.co.kr;
ssl_certificate /etc/ssl/yourdomain.co.kr/certificate.crt;
ssl_certificate_key /etc/ssl/yourdomain.co.kr/private.key;
}
docker restart [컨테이너 아이디]
실행