Post

EC2에서 HTTPS 설정 하기 (with NGINX)

🎬 Intro

EC2 인스턴스 대여 방법은 따로 다루지 않습니다. 그럼 EC2에 HTTPS 통신을 위해 SSL/TLS 인증서를 발급고 사용하는 방법을 알아봅시다.

🪜 Step

  • DNS 구매 및 설정
  • nginx 설치 및 설정
  • SSL/TLS 인증서 발급

✅ DNS 구매 및 설정

https 통신을 위해 SSL/TLS 인증서를 받기 위해서는 특정 도메인이 필요하기 때문에 도메인을 구매하셔야합니다. 여러 DNS 구매 사이트가 있지만 저는 가비아에서 구매했습니다.

  • https://www.gabia.com/ 에 접속해서 회원가입을 진행해줍니다.
  • 원하는 도메인을 검색하시고, 마음에드는 탑 레벨을 선택 및 신청한뒤 구매해줍니다. 저는 .shop이 500원으로 가장 저렴해서 이 녀석으로 구매했습니다.
  • 우측 상단에 My gabia -> 이용 중인 서비스 블럭도메인 -> 구매한 도매인 관리 -> 도메인 관리 순으로 들어옵니다.
  • 도메인 관리의 도메인 리스트에서 구매한 도메인을 클릭해줍니다. img.png
  • 도메인 연결 설정을 클릭합니다.
  • 구매한 도메인의 설정을 클릭합니다.
  • 레코드 수정을 클릭합니다. img_1.png
  • 위 이미지에 값/위치만 EC2의 탄력적 IP 또는 퍼블릭 IP 주소를 입력해주고 수정 및 저장을 합니다.

✅ nginx 설치 및 설정

  • nginx를 설치합니다.
1
sudo apt-get install nginx
  • nginx 설정을 변경합니다.
1
sudo vim /etc/nginx/sites-available/default

img_1.png

  • sever_name 에 가비아에서 구매한 도메인 이름을 입력해줍니다.
  • location 블럭은 url path에 /api 가 있을 경우 proxy_pass에 적힌 경로로 리버스 프록시 한다는 것 입니다.
  • 리버스 프록시는 클라이언트의 요청을 받아서 다른 서버로 전달한다는 의미 입니다.
  • 설정이 잘 적용되는지 확인 하고 재시작합니다.
1
2
sudo nginx -t
sudo systemctl reload nginx

✅ SSL/TLS 인증서 발급

이제 SSL 인증서를 발급받고 설정하는 단계만 남았습니다. 인증서는 Let’s Encrypt(CA 인증기관)에서 발급 받는데 이때 사용되는 도구가 certbot 입니다. 따라서 certbot을 이용해서 인증서 발급을 진행하겠습니다.

  • certbot을 설치 및 실행하기 위해 snap을 설치합니다.
1
2
sudo snap install core
sudo snap refresh core
  • 기존에 설치 되어 있는 certbot을 제거합니다.
1
sudo apt-get remove certbot
  • certbot을 설치하고 필요 단계를 실행합니다.
1
2
3
4
5
6
7
8
9
10
11
12
# 설치
sudo snap install --classic certbot

# 명령어 실행을 위한 세팅
sudo ln -s /snap/bin/certbot /usr/bin/certbot

# 가비아에서 구매한 도메인에 SSL/TLS 인증서를 발급
# 이 과정에서 email 입력 단계가 필요
sudo certbot --nginx -d <도메인 이름> -d www.<도메인 이름>

# SSL/TLS 인증서를 적용
sudo certbot renew --dry-run
  • 성공시 다음과 같은 메세지가 출력 됩니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Requesting a certificate for forecast-test.shop and www.forecast-test.shop

Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/forecast-test.shop/fullchain.pem
Key is saved at:         /etc/letsencrypt/live/forecast-test.shop/privkey.pem
This certificate expires on 2024-11-29.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.

Deploying certificate
Successfully deployed certificate for forecast-test.shop to /etc/nginx/sites-enabled/default
Successfully deployed certificate for www.forecast-test.shop to /etc/nginx/sites-enabled/default
Congratulations! You have successfully enabled HTTPS on https://forecast-test.shop and https://www.forecast-test.shop

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
If you like Certbot, please consider supporting our work by:
 * Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
 * Donating to EFF:                    https://eff.org/donate-le
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  • 이제 https://<구매한 도메인="" 이름=""> 으로 접속하면 EC2의 localhost:8080으로 리버스 프록시가 되게 됩니다

참고

  • EC2 대여 하기
  • EC2의 보안 인바운드 규칙에서 HTTPS 443를 추가하셨는지 꼭 확인해주세요.

✨Summary

도메인 구매

SSL/TLS 인증서를 발급받기 위해 특정 도메인이 필요합니다. 가비아 같은 도메인 판매 사이트에서 도메인을 구매하고, EC2 인스턴스의 IP 주소와 연결합니다.

nginx 설치 및 설정

EC2 인스턴스에 nginx를 설치한 후, Nginx 설정 파일에서 도메인 이름과 리버스 프록시 설정을 적용합니다. 리버스 프록시는 클라이언트의 HTTPS 요청을 받아 백엔드 서버로 전달합니다.

SSL/TLS 인증서 발급

certbot 도구를 사용해 Let’s Encrypt(CA 인증기관)에서 SSL/TLS 인증서를 발급받아 nginx에 적용합니다. 인증서 설정 후, 클라이언트와 서버 간의 모든 통신이 HTTPS를 통해 안전하게 암호화됩니다.

This post is licensed under CC BY 4.0 by the author.