Let’s Encrypt로 Nginx 서버에 ‘무료 SSL 인증서’ 자동 갱신 설정하기

Let’s Encrypt로 Nginx 서버에 ‘무료 SSL 인증서’ 자동 갱신 설정하기

 

이전 튜토리얼에서 우리는 Nginx와 워드프레스를 연동하여 완벽하게 작동하는 ‘LEMP 스택’ 웹사이트를 구축했습니다. 하지만 이 사이트에는 치명적인 문제가 하나 있습니다. 바로 주소창에 http://로 시작하며 ‘주의! 안전하지 않은 사이트’라는 경고가 뜬다는 것이죠.

이 문제를 해결하기 위해, 우리는 **’Let’s Encrypt’**라는 비영리 기관에서 제공하는 무료 SSL/TLS 인증서를 설치할 것입니다. 이 인증서를 적용하면 데이터가 암호화되어 https:// (보안) 프로토콜로 사이트에 접속할 수 있습니다.

이 가이드에서는 **’Certbot’**이라는 도구를 사용해 Nginx 서버에 SSL 인증서를 5분 만에 설치하고, 3개월마다 자동으로 갱신되도록 설정하는 전 과정을 안내합니다.


 

0단계: (가장 중요!) 사전 준비 – 도메인 연결

 

SSL 인증서는 서버의 신원을 보증하는 ‘온라인 신분증’입니다. 따라서 IP 주소(예: 192.168.0.100)만으로는 Let’s Encrypt 인증서를 발급받을 수 없습니다.

이 튜토리얼을 진행하기 전, 다음 3가지 조건이 반드시 충족되어야 합니다.

  1. 공인 도메인 이름: my-site.com처럼 본인 소유의 도메인 이름이 있어야 합니다. (Goddady, 가비아, Namecheap 등에서 구매)
  2. DNS A 레코드 설정: 구매한 도메인의 DNS 설정(A 레코드)이 **서버의 ‘공인(Public) IP 주소’**를 가리키고 있어야 합니다. (내부 IP 192.168.x.x가 아닙니다.)
  3. 방화벽 포트 개방: 지난 튜토리얼에서 sudo ufw allow 'Nginx Full' 명령어를 실행했다면, HTTP(80)와 HTTPS(443) 포트가 이미 열려있습니다.

 

1단계: Certbot 설치하기

 

‘Certbot’은 Let’s Encrypt 인증서를 자동으로 발급받고 서버에 설정해주는 마법 같은 도구입니다. Nginx 설정을 자동으로 수정해주는 Nginx 전용 플러그인도 함께 설치합니다.

Bash

sudo apt update
sudo apt install certbot python3-certbot-nginx -y

 

2단계: Nginx 설정 파일에 도메인 적용

 

Certbot은 Nginx 설정 파일을 읽어보고 server_name 지시어에 적힌 도메인을 기준으로 인증서를 발급합니다. 이전 튜토리얼에서 IP 주소로 설정했던 부분을 실제 도메인으로 변경해야 합니다.

  1. 워드프레스용 Nginx 설정 파일을 엽니다.
    Bash

    sudo nano /etc/nginx/sites-available/wordpress
    
  2. server_name 부분을 IP 주소에서 내 도메인 이름으로 수정합니다. www가 붙은 주소도 함께 적어주는 것이 좋습니다.
    Nginx

    server {
        listen 80;
        # ⬇️ 이 부분을 수정합니다.
        server_name my-site.com www.my-site.com; # ⬅️ IP 대신 실제 도메인 입력
    
        root /var/www/html/wordpress;
        index index.php index.html index.htm;
    
        # ... (이하 설정은 동일) ...
    }
    
    • 저장하고 닫기: Ctrl + X -> Y -> Enter
  3. 설정이 올바른지 테스트하고 Nginx를 다시 로드(재시작보다 안전함)합니다.
    Bash

    sudo nginx -t
    # "syntax is ok", "test is successful" 메시지 확인
    sudo systemctl reload nginx
    

 

3단계: Certbot 실행 (인증서 발급 및 Nginx 자동 설정)

 

이제 Certbot을 실행하여 인증서를 발급받고 Nginx에 자동으로 적용시킵니다.

  1. 아래 명령어를 실행합니다. --nginx 플러그인이 Nginx 설정을 스캔하고, -d 플래그로 해당 도메인에 대한 인증서를 요청합니다.
    Bash

    # ⬇️ my-site.com 부분을 본인의 도메인으로 변경하세요.
    sudo certbot --nginx -d my-site.com -d www.my-site.com
    
  2. Certbot이 몇 가지 질문을 합니다.
    • Enter email address (used for urgent renewal…): 인증서 만료 알림 등을 받을 이메일 주소를 입력합니다. (필수)
    • Please read the Terms of Service… (Y/N): Y 입력.
    • Would you be willing… (Y/N): EFF 재단 뉴스레터 수신 여부. N을 선택해도 무방합니다.

 

4단계: HTTP -> HTTPS 리디렉션 선택 (필수)

 

인증서 발급에 성공하면, Certbot이 마지막으로 매우 중요한 질문을 합니다.

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):
  • 1: 리디렉션 없음: http://https:// 두 주소 모두 허용 (권장하지 않음)
  • 2: 리디렉션: (강력 권장) http://로 접속하는 모든 사용자를 https://로 자동 강제 이동시킵니다.

반드시 2를 입력하고 Enter를 누릅니다.

모든 것이 성공적으로 완료되면 “Congratulations! You have successfully enabled…”라는 메시지가 나타납니다.

Certbot은 이 과정에서 /etc/nginx/sites-available/wordpress 파일을 자동으로 수정하여 SSL 설정과 리디렉션 규칙을 추가해줍니다.


 

5단계: 자동 갱신 테스트하기

 

Let’s Encrypt 인증서는 90일마다 갱신해야 하지만, Certbot은 설치 과정에서 이 갱신 과정을 자동으로 설정합니다. (systemd 타이머 또는 cron 작업 이용)

우리는 이 자동 갱신이 잘 작동하는지 ‘가상 테스트’만 해보면 됩니다.

Bash

sudo certbot renew --dry-run

이 명령어를 실행했을 때, “Congratulations, all simulated renewals succeeded…” (모든 가상 갱신이 성공했습니다)라는 메시지가 나타나면 모든 설정이 끝난 것입니다.

이제 90일이 되기 전에 Certbot이 알아서 인증서를 갱신해 줄 것입니다.


 

6단계: 최종 확인

 

이제 웹 브라우저를 열고 http://my-site.com (내 도메인)으로 접속해 보세요.

  • 자동으로 https://my-site.com으로 리디렉션됩니다.
  • 주소창에 ‘주의 요함’ 경고가 사라지고, 안전한 ‘자물쇠(🔒)’ 아이콘이 나타납니다.

축하합니다! 당신의 Nginx 서버는 이제 전 세계 표준에 맞는 안전한 https:// 웹사이트를 운영하게 되었습니다.

댓글 남기기