클라우드/AWS

[AWS] ec2로 nginx서버 호스팅하기

hdimmfh 2024. 7. 20. 21:40
반응형

HTML, CSS, JS 파일들은 S3 버킷에 업로드 → webfront → route53 을 활용하여 배포해도 무방하지만, 로드밸런싱, HTTP 기능 구현의 편의를 위해 ec2로 배포하는 것도 좋은 방법 중 하나입니다. 본 포스팅 에서는 nginx 서버(80포트)를 호스팅 중인 ec2인스턴스의 배포 프로세스에 대해 정리해보겠습니다.

사용자의 웹(nginx) 서버 접근 프로세스

 

1. 도메인 구입 : Route53

 

서버 관리자는 Route53에서 도메인을 구입하여 클라우드 자원과 연결시킬 수 있습니다. 사용자는 이 도메인 이름을 통해 숫자로 되어있는 Public IP(209.85.227.104) 대신 www.google.com와 같은 링크를 활용하여 서버에 접속할 수 있게 됩니다.

 

2. https : ACM(TLS/SSL 인증서) 발급


ACM(AWS Certificate Manager)
에서 구입한 도메인의 SSL/TLS 인증서를 발급받을 수 있습니다. ACM을 요청 한 이후 AWS 콘솔 > Certificate Manager > 좌측 메뉴 List Certificates > 요청한 인증서 > 중단 Create records in Route53 클릭 > create records 클릭까지 한 뒤 10분~1시간 가량 기다리면 인증서가 발급 됩니다. 

 

 

3. 로드밸런싱 : ELB

사용자는 단순히 도메인 주소를 통해 접속하겠지만,  내부에서는 트래픽을 균등하게 배포하고, 타겟 그룹으로 포워딩하며 서버에서 설정한 접속 규칙에 맞는지 검토까지 하고 나서야 사용자에게 요청에 대한 응답을 반환하게 됩니다. 트래픽을 균등하게 배포하는 주체는 '로드밸런서(Elastic Load Balancer)' 이며 이는 Application, Network 단의 로드밸런싱을 제공하여 서버에서 배포 중인 자원에 요청을 분산하여 효율적인 자원 관리를 가능하게 하는 기능입니다. 이 ELB는 추후 Route53의 레코드에 별칭(Alias)으로써 연결 되어 사용자의 트래픽을 받을 수 있게 됩니다. 보안을 위해 http(80포트)가 아닌 ACM으로 발급받은 인증서를 활용한 https(433포트)로만 사용자의 접속을 받고 싶다면, ALB에 리스너를 추가하여 http(80)으로 접속 시 https(443)으로 리디렉션 될 수 있게 설정합니다. 이제 사용자가 443번 포트로 접속할 때의 리스너만 설정하면 됩니다.

더보기

# AWS 작업 절차

AWS 콘솔 > ec2 > 좌측 메뉴 중단 로드밸런서 > 생성 > 리스너 추가 > 80포트는 443으로 리디렉션 추가

 

4. 대상 그룹 : Target Group

Route53의 record로 등록 되어있는 ELB(여기선 ALB)는 트래픽을 다시 Target Group으로 포워딩 해야합니다. Target Group은 ALB로부터 온 트래픽을 다시 ec2의 특정 포트로 포워딩 해 줍니다. 저는 80포트로 nginx 서버를 열었기 때문에, HTTP(80) 포트를 사용하는 Target Group에 nginx를 호스팅 하고 있는 ec2 인스턴스의 80포트로 연결하겠습니다.

더보기

# AWS 작업 절차

AWS 콘솔 > ec2 > 좌측 메뉴 중단 타겟 그룹 > 생성(http) > 타겟 추가 > ec2 인스턴스의 80포트와 연결

 

5. ELB에 Target Group 연결

ELB에서 443번 포트로 들어온 트래픽을 생성한 Target Group(대상그룹)으로 전달하는 리스너를 추가하고, 이 리스너에 생성 해 두었던 ACM(SSL/TLS 인증서)를 적용 해 주면 사용자의 모든 트래픽(80, 443)은 결국 TLS인증서를 거치게 됩니다.

더보기

# AWS 작업 절차

AWS 콘솔 > ec2 > 좌측 메뉴 중단 로드밸런서 > 리스너 추가 > 443포트를 생성 한 타겟 그룹에 연결

 

6. Route53에 ALB 연결

AWS 콘솔 > Route53 > 생성 해 두었던 도메인 > 레코드 생성 > 별칭 > application 로드밸런서 > 생성 해 두었던 ALB 선택을 통해 도메인 주소와 로드밸런서를 연결 해 주면 모든 작업이 마무리 된 것입니다. 이제 사용자는 도메인에 접속한다면 트래픽은 Route53(domain) → ALB(443) → Target Group(80) → ec2(80/nginx)로 전달되어 기대한 화면을 볼 수 있게 될 것입니다.

 

🐾 결과 

1. 사용자가 80포트(http)로 들어온다면, ELB는 443번으로 리디렉션 시킵니다.

2. 443(https)포트 트래픽은 Target group(ec2인스턴스의 80(http)포트)로 포워딩 됩니다.

3. 결과적으로 모든 사용자는 SSL/TLS를 거쳐 https로만 통신하게 됩니다.

반응형