[AWS] EC2 nginx + Let's Encrypt HTTPS 적용하기

NCOOKIE·2025년 4월 7일
0

AWS 공짜로 사용하기

목록 보기
14/14

공짜인줄 알았건만...

지난 포스팅에서 AWS 프리티어 계정에서 요금이 청구되던 문제를 해결했었다. 그래서 이제는 더 신경 안 써도 되겠지 하다가...

(아...)

[VPC IP Address Manager]에서 도대체 누가 퍼블릭 IP를 축내고 있나 봤더니

로드밸런서가 문제였다. 이전 계정에서는 로드밸런서를 두 개 사용하느라 인지하지 못하고 있었다. AWS의 로드밸런서는 생성 시 최소 2개의 가용 영역을 할당해야 한다. 즉, 퍼블릭 IP를 2개 사용한다는 것이다. 그래서 1개만큼의 IP 요금이 부과되고 있던 것이다. (+ Route 53 호스팅 영역 0.5 USD까지)

원인 제거

위에서 언급했다시피 AWS의 로드밸런서는 최소 2개의 가용 영역을 사용한다. 때문에 로드밸런서를 사용하면 반드시 요금이 청구될 수 밖에 없다. 그래서 지웠다. 대상 그룹과 호스팅 영역도 같이 지웠다.

이제 돈은 안 나가지만 올려뒀던 서버의 HTTPS도 안 된다.

그럼 HTTPS는?

조금 귀찮지만 다른 해결책들이 있다. 난 그 중 nginx + Let's Encrypt를 사용하는 방법을 선택했다.

가비아 도메인 설정

만약 AWS에서 도메인을 구매했다면 매달 0.5달러씩 내면서 Route 53 써야한다. 하지만 나는 가비아에서 도메인을 샀으니 설정을 해주자.

도메인의 네임서버를 가비아의 것으로 바꿔줬다. 이전에는 AWS Route 53 호스팅 영역에서 제공되는 네임서버를 사용하고 있었다.

DNS도 설정해준다. 만약 서브 도메인을 사용할 것이라면 호스트에 값을 넣어준다. 값/위치에는 EC2 퍼블릭 IP를 입력한다.

EC2 보안 그룹 포트 개방

EC2 인스턴스의 80, 443 포트를 인바운드 규칙에서 열어주자.

EC2 Nginx 설치 및 기본 설정

Nginx 설치 (Amazon Linux 기준)

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

Nginx 설정 파일 생성

sudo vi /etc/nginx/conf.d/{도메인}.conf

파일 이름은 아무렇게나 해도 된다. 나는 여러 도메인 사용 시 헷갈릴 수 있을 것 같아 도메인 이름을 사용했다.

server {
    listen 443 ssl;
    server_name {도메인};

    ssl_certificate /etc/letsencrypt/live/{도메인}/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/{도메인}/privkey.pem;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

적용

sudo nginx -t
sudo systemctl start nginx
sudo systemctl enable nginx

Certbotd으로 HTTPS 적용

Certbot 설치

sudo yum install -y certbot python3-certbot-nginx

인증서 발급 및 자동 적용

sudo certbot --nginx -d {도메인}

자동 갱신 설정 확인

타이머 등록

sudo systemctl enable certbot-renew.timer
sudo systemctl start certbot-renew.timer

타이머 정상 등록 확인

sudo systemctl list-timers | grep certbot

certbot-renew 타이머는 매일 2회, 시스템에 의해 certbot renew를 실행한다. 단, 인증서가 만료 30일 이내일 때만 실제 갱신을 시도하기 때문에 Let's Encrypt의 주 5회 제한에는 걸리지 않는다.

참고

profile
일단 해보자

0개의 댓글

관련 채용 정보