본문 바로가기
Linux

Nginx HTTPS SSL 설정하기(Nginx, Let's Encrypt, EC2)

by pocket.dev 2024. 9. 3.
반응형

let's encrypt logo

 

EC2 인스턴스에 HTTPS를 적용하려면 우선 SSL 인증서를 발급받아야 한다.

무료로 SSL 인증서를 받을 수 있는 Let's Encrypt를 사용했다.

 

1. Certbot 설치

Certbot: Let's Encrypt 인증서를 발급받고 자동갱신 하기 위함

$ sudo apt-get update
$ sudo apt-get install certbot python3-certbot-nginx

 

2. SSL 인증서 발급

sample.com과 www.sample.com 부분에 실제 도메인을 넣어준다.

# sudo certbot --nginx -d <도메인>
$ sudo certbot --nginx -d sample.com

인증서 발급 성공 메시지

 

3. 인증서 자동 갱신 설정

Let's Encrypt를 사용해서 발급된 인증서는 3개월 동안 유효하다. 아래 명령어를 입력해서 갱신을 한 번 시도해서 에러가 발생할지 여부를 살펴본다.

$ sudo certbot renew --dry-run

 

명령어 실행 시에 에러가 발생하지 않았다면 이제는 --dry-run 옵션을 빼고 실제 갱신을 수행해준다.

$ sudo certbot renew

 

인증서 정보를 확인해본다.

$ sudo certbot certificates

 

3개월 중 남은 89일동안 인증서가 유효한 것을 확인할 수 있다.

 

인증서 정보 확인하기

 

4. 자동 갱신 정보 확인하기

아래 명령어를 입력해보면 certbot에 적용된 timer를 확인할 수 있다.

$ sudo systemctl list-timers

list-timers 결과

 

아래 명령어를 사용해보면 certbot.timer에 대한 더 자세한 내용을 확인해 볼 수 있다.

$ sudo systemctl status certbot.timer

certbot.timer 상태 확인

 

5. Nginx 파일에 SSL 정보 넣어주기

Nginx 설정 파일 열기

$ sudo vi /etc/nginx/sites-available/default

 

default 파일에서 아래 부분처럼 ssl에 대한 정보를 넣어준다. sample.com에는 실제 도메인 정보를 넣어준다.

(아마 # managed by Certbot라는 주석과 함께 자동 세팅 되어있을 것이다.)

server {
    listen 443 ssl;
    server_name sample.com;

    ssl_certificate /etc/letsencrypt/live/sample.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/sample.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}

 

이제 Nginx 설정이 제대로 됐는지 테스트를 진행한다.

$ sudo nginx -t

 

이상이 없다면, 아래 명령어를 통해 Nginx를 재시작한다. 상태도 확인해준다.

$ sudo systemctl restart nginx
$ sudo systemctl status nginx