다중 도메인(여러 도메인, 멀티 도메인) ex) a.com
, b.com
등 에 대하여
한번에 Https 설정을 완료하고, 이를 자동 갱신한다.
이 혁신적인 방법은 하나의 인증서로 여러 도메인을 관리한다.
환경 설명
모든 환경은 도커 컨테이너로 작동한다.
- Docker
- Nginx
- CertBot
- Project (Front)
- Project (Back)
바로 본론으로 들어간다.
docker run -d --name nginx --network server \
-p 80:80 \
-p 443:443 \
-p 8080:8080 \
-p 8443:8443 \
-v nginx-settings:/etc/nginx \
-v certbot-volume:/etc/letsencrypt \
-v certbot-volume:/var/www/html \
nginx
주의 :
필자는 nginx-settings에 nginx 설정을 관리하였고,
certbot을 위한 certbot-volume을 생성하였다.필요에 따라 호스트 시스템에 마운트 시키거나, 볼륨 명을 바꾸면 된다.
\conf.d
에 httpToHttps.conf
를 제작한다.
(앞으로 모든 conf 파일은 해당 폴더 내 생성으로 간주한다.)
server {
listen 80;
server_name 도메인1 도메인2;
location /.well-known/acme-challenge/ {
allow all;
root /var/www/html;
}
location / {
return 301 https://$host$request_uri;
}
}
docker run -it --rm \
-v certbot-volume:/etc/letsencrypt \
-v certbot-volume:/var/www/html \
certbot/certbot certonly --webroot -w /var/www/html -d 도메인1 -d 도메인2
기본적인 SSL 인증서를 미리 다운받아둔다.
컨테이너명.conf
를 제작한다.
server {
listen 443 ssl;
server_name 도메인1;
ssl_certificate /etc/letsencrypt/live/도메인1/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/도메인1/privkey.pem;
# location 등 나머지 설정
}
server {
listen 443 ssl;
server_name 도메인2;
ssl_certificate /etc/letsencrypt/live/도메인1/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/도메인1/privkey.pem;
# location 등 나머지 설정
}
주의!
이 방법은 하나의 인증서로 서로 다른 도메인을 전부 인증한다.
따라서도메인2
의 경우도도메인1
의 인증서를 사용해야한다.
renew_cert.sh
생성
docker run -it --rm \
-v certbot-volume:/etc/letsencrypt \
-v certbot-volume:/var/www/html \
certbot/certbot renew
docker exec nginx nginx -s reload
chmod +x renew_cert.sh
crontab 진입 (cron 설정)
crontab -e
편집기 선택 창이 뜬다. 쉽게 1번의 nano
편집기를 사용한다.
crontab의 맨 하단에 다음을 입력한다.
0 0 12,25 * * ~/renew_cert.sh
Cron이 뭔가요?
유닉스 계열 OS의 시간 기반 작업 스케줄러
Cron 작업 편집
crontab -e
를 이용하여 현재 사용자의 Cron 작업 목록을 편집할 수 있다
표현식
분 시간 일 월 요일
명령 (또는 실행파일)
0 0 12,25 * * ~/renew_cert.sh
즉, 매월 12,25일 자정에 인증서를 갱신한다
추가 정보
- 시스템이 실행중이면 계속 작업이 실행된다
-> 사용자가 로그인되어 있지 않아도 계속 실행된다.