지난 포스팅에서 AWS 프리티어 계정에서 요금이 청구되던 문제를 해결했었다. 그래서 이제는 더 신경 안 써도 되겠지 하다가...
(아...)
[VPC IP Address Manager]에서 도대체 누가 퍼블릭 IP를 축내고 있나 봤더니
로드밸런서가 문제였다. 이전 계정에서는 로드밸런서를 두 개 사용하느라 인지하지 못하고 있었다. AWS의 로드밸런서는 생성 시 최소 2개의 가용 영역을 할당해야 한다. 즉, 퍼블릭 IP를 2개 사용한다는 것이다. 그래서 1개만큼의 IP 요금이 부과되고 있던 것이다. (+ Route 53 호스팅 영역 0.5 USD까지)
위에서 언급했다시피 AWS의 로드밸런서는 최소 2개의 가용 영역을 사용한다. 때문에 로드밸런서를 사용하면 반드시 요금이 청구될 수 밖에 없다. 그래서 지웠다. 대상 그룹과 호스팅 영역도 같이 지웠다.
이제 돈은 안 나가지만 올려뒀던 서버의 HTTPS도 안 된다.
조금 귀찮지만 다른 해결책들이 있다. 난 그 중 nginx + Let's Encrypt를 사용하는 방법을 선택했다.
만약 AWS에서 도메인을 구매했다면 매달 0.5달러씩 내면서 Route 53 써야한다. 하지만 나는 가비아에서 도메인을 샀으니 설정을 해주자.
도메인의 네임서버를 가비아의 것으로 바꿔줬다. 이전에는 AWS Route 53 호스팅 영역에서 제공되는 네임서버를 사용하고 있었다.
DNS도 설정해준다. 만약 서브 도메인을 사용할 것이라면 호스트에 값을 넣어준다. 값/위치에는 EC2 퍼블릭 IP를 입력한다.
EC2 인스턴스의 80, 443 포트를 인바운드 규칙에서 열어주자.
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
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회 제한에는 걸리지 않는다.