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가지 조건이 반드시 충족되어야 합니다.
- 공인 도메인 이름:
my-site.com처럼 본인 소유의 도메인 이름이 있어야 합니다. (Goddady, 가비아, Namecheap 등에서 구매) - DNS A 레코드 설정: 구매한 도메인의 DNS 설정(A 레코드)이 **서버의 ‘공인(Public) IP 주소’**를 가리키고 있어야 합니다. (내부 IP
192.168.x.x가 아닙니다.) - 방화벽 포트 개방: 지난 튜토리얼에서
sudo ufw allow 'Nginx Full'명령어를 실행했다면, HTTP(80)와 HTTPS(443) 포트가 이미 열려있습니다.
1단계: Certbot 설치하기
‘Certbot’은 Let’s Encrypt 인증서를 자동으로 발급받고 서버에 설정해주는 마법 같은 도구입니다. Nginx 설정을 자동으로 수정해주는 Nginx 전용 플러그인도 함께 설치합니다.
sudo apt update
sudo apt install certbot python3-certbot-nginx -y
2단계: Nginx 설정 파일에 도메인 적용
Certbot은 Nginx 설정 파일을 읽어보고 server_name 지시어에 적힌 도메인을 기준으로 인증서를 발급합니다. 이전 튜토리얼에서 IP 주소로 설정했던 부분을 실제 도메인으로 변경해야 합니다.
- 워드프레스용 Nginx 설정 파일을 엽니다.
Bash
sudo nano /etc/nginx/sites-available/wordpress server_name부분을 IP 주소에서 내 도메인 이름으로 수정합니다.www가 붙은 주소도 함께 적어주는 것이 좋습니다.Nginxserver { 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
- 저장하고 닫기:
- 설정이 올바른지 테스트하고 Nginx를 다시 로드(재시작보다 안전함)합니다.
Bash
sudo nginx -t # "syntax is ok", "test is successful" 메시지 확인 sudo systemctl reload nginx
3단계: Certbot 실행 (인증서 발급 및 Nginx 자동 설정)
이제 Certbot을 실행하여 인증서를 발급받고 Nginx에 자동으로 적용시킵니다.
- 아래 명령어를 실행합니다.
--nginx플러그인이 Nginx 설정을 스캔하고,-d플래그로 해당 도메인에 대한 인증서를 요청합니다.Bash# ⬇️ my-site.com 부분을 본인의 도메인으로 변경하세요. sudo certbot --nginx -d my-site.com -d www.my-site.com - 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 작업 이용)
우리는 이 자동 갱신이 잘 작동하는지 ‘가상 테스트’만 해보면 됩니다.
sudo certbot renew --dry-run
이 명령어를 실행했을 때, “Congratulations, all simulated renewals succeeded…” (모든 가상 갱신이 성공했습니다)라는 메시지가 나타나면 모든 설정이 끝난 것입니다.
이제 90일이 되기 전에 Certbot이 알아서 인증서를 갱신해 줄 것입니다.
6단계: 최종 확인
이제 웹 브라우저를 열고 http://my-site.com (내 도메인)으로 접속해 보세요.
- 자동으로
https://my-site.com으로 리디렉션됩니다. - 주소창에 ‘주의 요함’ 경고가 사라지고, 안전한 ‘자물쇠(🔒)’ 아이콘이 나타납니다.
축하합니다! 당신의 Nginx 서버는 이제 전 세계 표준에 맞는 안전한 https:// 웹사이트를 운영하게 되었습니다.