[Infra] EC2에 도메인 등록 및 HTTPS 설정

Harry Lee·2024년 7월 2일
0
post-thumbnail

이 글에서는 EC2 인스턴스에 도메인을 등록하고 HTTPS를 설정하고자 한다.
원래 AWS Certificate Manager와 로드밸런서(ALB)를 사용하여 HTTPS 설정을 하려고 했으나 로드밸런서IPv4 과금 이슈로 인해 Nginx를 사용하고자 한다.

1. 도메인 구매 및 설정

도메인 구매

가비아에서 구매하였다. (구매과정은 생략)

Route 53에서 호스팅 영역 생성

  1. AWS Management Console에서 Route 53 서비스를 선택한다.
  2. "호스팅 영역 생성"을 클릭하고 도메인 이름을 입력하여 호스팅 영역을 생성한다.

DNS 설정

  1. 도메인 → DNS 정보 → DNS 관리 → 설정 -> 레코드 수정

  2. 다음과 같은 A 레코드를 추가한다.
    - A타입 @ : EC2 퍼블릭 IP 주소
    - A타입 www : EC2 퍼블릭 IP 주소

네임서버 설정

  1. Route 53에서 생성한 호스팅 영역의 네임서버 정보를 확인한다.

  2. 가비아 도메인 관리 페이지에서 "도메인 정보 변경" -> "네임서버 설정"에서 1~4차 네임서버를 입력한다. (맨 뒤의 점(.)은 제외)

보안 그룹 인바운드 규칙 추가

  1. HTTP (TCP 80 포트)
    • 유형: HTTP
    • 프로토콜: TCP
    • 포트 범위: 80
    • 소스: 0.0.0.0/0, ::/0 (모든 IP 주소에서 허용)
  2. HTTPS (TCP 443 포트)
    - 유형: HTTPS
    - 프로토콜: TCP
    - 포트 범위: 443
    - 소스: 0.0.0.0/0, ::/0 (모든 IP 주소에서 허용)

2. Nginx와 Certbot을 사용한 SSL 설정

Nginx 설치

sudo apt update
sudo apt install nginx

Certbot 설치

sudo apt install certbot python3-certbot-nginx

SSL 인증서 발급

sudo certbot certonly --nginx -d mydomain.com

SSL 인증서 확인

sudo ls /etc/letsencrypt/live/mydomain.com
  • privkey.pem: 비공개 키
  • fullchain.pem: 전체 인증서 체인 (서버 인증서 + 중간 인증서)
  • cert.pem: 서버 인증서
  • chain.pem: 중간 인증서

Nginx 설정 파일 수정

sudo nano /etc/nginx/sites-available/default

아래 내용을 추가한다.

# 80 포트로 들어왔을때 https 경로로 리디렉션
server {
    listen 80;
    server_name mydomain.com;
    return 301 https://mydomain.com$request_uri;
}

# 443 포트로 들어왔을때 서버 포트인 3000 포트로 포워딩
server {
    listen 443 ssl http2;
    server_name mydomain.com;
	
    # ssl 인증서 적용
    ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Nginx 재시작

sudo systemctl restart nginx


해당 도메인으로 접속 시 https로 접속되는 것을 확인하였다.

profile
A keyboard player

0개의 댓글