[Nginx][CertBot] 여러 도메인의 Https 갱신 자동화

이수혁/Lee_Su_Hyeok·2023년 11월 29일
0

Nginx

목록 보기
1/1
post-thumbnail

다중 도메인(여러 도메인, 멀티 도메인) ex) a.com, b.com 등 에 대하여
한번에 Https 설정을 완료하고, 이를 자동 갱신한다.

이 혁신적인 방법은 하나의 인증서로 여러 도메인을 관리한다.

환경 설명

모든 환경은 도커 컨테이너로 작동한다.

  • Docker
    • Nginx
    • CertBot
    • Project (Front)
    • Project (Back)

바로 본론으로 들어간다.

Nginx 실행

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을 생성하였다.

필요에 따라 호스트 시스템에 마운트 시키거나, 볼륨 명을 바꾸면 된다.

Nginx 80 -> 443 라우팅

\conf.dhttpToHttps.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;
        }
}

Certbot 실행

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 인증서를 미리 다운받아둔다.

Nginx 설정

커스텀 conf 파일

컨테이너명.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의 인증서를 사용해야한다.

Cron 설정 (자동화 설정)

갱신 스크립트 제작

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

자동화 with Cron

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일 자정에 인증서를 갱신한다

추가 정보

  • 시스템이 실행중이면 계속 작업이 실행된다
    -> 사용자가 로그인되어 있지 않아도 계속 실행된다.
profile
Back-End( Spring Boot ) 기반 FullStack 개발자

0개의 댓글