글

라벨이 Nginx인 게시물 표시

EC2에서 Let's Encrypt와 Nginx로 HTTPS 설정하는 방법 (Certbot 완전 가이드)

브라우저 주소창에 '주의 요함' 또는 'Not Secure' 경고가 뜨는 순간, 사용자 이탈은 시작된다. EC2 위에서 Nginx로 서비스를 운영 중인데 아직 HTTP만 열려 있다면, Let's Encrypt의 무료 SSL 인증서와 Certbot을 이용해 30분 안에 HTTPS를 완성할 수 있다. 이 글은 실제 운영 환경에서 겪는 함정 — 보안 그룹 누락, 도메인 검증 실패, 자동 갱신 설정 오류 — 까지 포함해 처음부터 끝까지 다룬다. TL;DR — EC2 HTTPS 설정 핵심 요약 단계 작업 주요 확인 포인트 1 보안 그룹에서 443 포트 개방 인바운드 규칙 HTTPS(443) 추가 2 도메인 A 레코드를 EC2 퍼블릭 IP로 연결 DNS 전파 확인 필수 3 Nginx 설치 및 서버 블록 구성 server_name에 실제 도메인 입력 4 Certbot 설치 및 인증서 발급 --nginx 플러그인 사용 5 자동 갱신 크론 또는 systemd 타이머 확인 certbot renew --dry-run 통과 여부 HTTPS 인증서 발급이 작동하는 방식 Let's Encrypt는 ACME(Automated Certificate Management Environment) 프로토콜로 도메인 소유권을 검증한다. Certbot의 --nginx 플러그인은 HTTP-01 챌린지를 사용하는데, 이 과정에서 Let's Encrypt 서버가 외부에서 http://<your-domain>/.well-known/acme-challenge/ 경로에 접근할 수 있어야 한다. 즉, EC2 보안 그룹의 80번 포트가 열려 있지 않으면 챌린지 자체가 실패한다 — 이게 가장 흔한 첫 번째 함정이다. sequenceDiagram participant CB a...

EC2 인스턴스 시작 시 스크립트 자동 실행: User Data 완전 가이드

EC2 인스턴스를 띄울 때마다 Nginx 설치, 환경 변수 설정, 애플리케이션 배포를 수동으로 반복하고 있다면, User Data를 제대로 활용하지 못하고 있는 것이다. 이 글은 EC2 User Data 를 사용해 인스턴스 최초 부팅 시 셸 스크립트를 자동 실행하는 방법을 실제 운영 관점에서 정리한다. TL;DR — EC2 User Data 핵심 요약 항목 내용 실행 시점 인스턴스 최초 부팅 시 1회 (기본값) 실행 주체 root 권한으로 실행됨 스크립트 시작 반드시 #!/bin/bash 또는 #!/bin/sh 포함 로그 위치 /var/log/cloud-init-output.log 콘솔 입력 위치 인스턴스 시작 마법사 → '고급 세부 정보' → 'User Data' CLI 파라미터 --user-data file://userdata.sh 크기 제한 최대 16KB (일반 텍스트 기준) EC2 User Data가 동작하는 방식 User Data는 cloud-init 데몬이 처리한다. 인스턴스가 처음 부팅될 때 cloud-init은 EC2 인스턴스 메타데이터 서비스(IMDS)에서 User Data를 가져와 실행한다. 스크립트가 #!/bin/bash 로 시작하면 셸 스크립트로 처리되고, #cloud-config 로 시작하면 cloud-init 네이티브 YAML 형식으로 처리된다. 중요한 점은 기본적으로 최초 1회만 실행된다는 것이다. 인스턴스를 재시작해도 User Data는 다시 실행되지 않는다. 매 부팅마다 실행하려면 별도 설정이 필요하다. sequenceDiagram participant EC2 as EC2 인스턴스 participant IMDS as 메타데이터 서비스 participant CI as cloud-init ...