Infra/linux

nginx에 무료 ssl 자동 갱신 명령어 묶음 (feat. let's encrypt)

하우아유두잉 2024. 3. 8. 14:38

 

OS 환경은 ubuntu이다.


SSL 적용

1. letsencrypt 설치

$ sudo apt update
$ sudo apt-get install letsencrypt -y

 

 

2. root 계정 전환 -> nginx 정지

$ sudo su -
$ cd /root
$ sudo service nginx stop

 

 

3. 인증서 생성

-d 뒤에 본인의 도메인을 입력하면된다. (서브도메인이 있는 경우 뒤에 개수만큼 추가하면 됨)

인증시 email을 입력하고 모두 'Y'를 한다.

성공시 축하 메시지가 나온다.

$ sudo certbot certonly --standalone -d mydomain.com -d www.mydomain.com -d test.mydomain.com

 

 

4. 파일을 확인한다.

 파일 위치 :

/etc/letsencrypt/live/mydomain.com/

/etc/letsencrypt/live/www.mydomain.com/

/etc/letsencrypt/live/test.mydomain.com/

 

 

5. nginx 재시작

$ sudo service nginx restart

 

 

6. nginx conf에 ssl 설정을 해준다.

파일 위치 : /etc/nginx/sites-available/default

도메인 수만큼 server {}를 추가하면 된다.

나머지 2개는 생략 하겠다.

나의 경우 https(433)으로 들어온 요청을 :3000 포트로 전달한다.

server {
        # SSL configuration
#
        listen 443 ssl http2;
        listen [::]:443 ssl http2 ;
        client_max_body_size 50M;
        ssl_certificate "/etc/letsencrypt/live/mydomain.com/fullchain.pem";
        ssl_certificate_key "/etc/letsencrypt/live/mydomain.com/privkey.pem";
        ssl_dhparam "/etc/nginx/ssl/dhparams.pem";

        server_name mydomain.com;
        location / {
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_set_header X-Real-IP $remote_addr;
                proxy_pass http://127.0.0.1:3000;
        }
}

 

만약 /etc/nginx/ssl/dhparams.pem이 없다면 아래 명령어로 만들어 주자.

$ sudo openssl dhparam -out /etc/nginx/ssl/dhparams.pem 2048

 

7. 끝으로 nginx를 다시 재시작 한다.

$ sudo service nginx restart

 

문제가 없다면 정상적으로 적용된 것이다.

 


 

SSL 자동 갱신

1. 쉘 스크립트 파일 생성

$ cd /bin
$ sudo nano letsencrypt.sh

 

 

#!/bin/sh
sudo service nginx stop
sudo certbot renew > /home/pi/Desktop/le_renew.log
fuser -k 80/tcp
sudo service nginx start

 

 

2. 실행 권한 부여

$ sudo chmod +x letsencrypt.sh

 

 

3. 크론탭 오픈

$ sudo crontab -e

 

 

4. 배치잡 추가

ssl 기한이 90일이기 때문에 90일마다 실행되도록 해준다.

0 0 */90 * * letsencrypt.sh

 

 

5. cron 재실행

$ sudo service cron restart