본문 바로가기

카테고리 없음

AWS Lightsail 을 이용하여 서버 배포해보기 - (2) 로드밸런서, SSL인증서 생성, 도메인 사기

 

로드 밸런서를 써야하는 이유

 

이유 1. https 처리 (인증서)

로드 밸런서도 결국 내부적으로는 EC2 인데요. 로드 밸런서가 http(80), https(443) 으로 들어오는 요청을 리스닝하게 설정해줄겁니다. 

(* 참고로 443 포트는 그냥 열어준다고 되는게 아니라 인증서가 필요합니다)

 

참고로 로드 밸런서와 lightsail 을 통해 만든 VM 의 통신은 내부망에서 이루어집니다.

같은 망을 사용하기 때문에, 로드 밸런서 -> VM 으로의 요청은 443 포트로 처리할 필요 없고, 80 포트로 처리하면 됩니다.

 

이유 2. VM 에 부여된 public ip 는 dynamic 하므로 언제든 바뀔 수 있음

이 public ip 는 평생 저 ip 인게 아니라, 서버를 중단했다가 다시 재시작하면 ip 가 변경됩니다. 

그 말은 유저가 54.180.135.107 로 접속해야겠다고 외워서 될 일이 아니라는거죠.

 

로드밸런서 생성하기
  • HTTPS 를 활성화 시키기 위해서는 SSL/TLS 인증서가 필요합니다.
  • (주의) Lightsail 의 로드밸런서는 과금되는 서비스입니다.

 

 

생성된 로드 밸런서를 보면, IP 가 부여되는게 아니라 DNS 자체가 부여된 걸 볼 수 있습니다.

외부 트래픽이 어떤 형태로 들어오든 이 로드밸런서는 지정한 VM 에 전부 80포트로 전달해 주겠다는 설명이 있는데요.

(VM의 인바운드 룰에 80포트가 열려있으니 더 이상 이 부분은 신경 안 써도 됩니다)

 

 

다만, VM 에서 웹 서버를 띄울 때 80 포트가 아닌 다른 포트(ex. 4000 포트) 로 띄운 경우 포트 포워딩을 해주어야 합니다.

(웹 서버를 80 포트로 띄우신 경우, 아래 과정은 패스해주세요)

 

VM 의 80포트로 들어오는 요청을 4000포트로 포트포워딩 하기 (iptables 이용)

 

sudo apt-get install iptables

sudo sysctl -w net.ipv4.ip_forward=1 # 포트 포워딩 활성화


sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 4000 # 4000 포트로 리다이렉션

sudo apt-get install iptables-persistent # 서버 재 시작 후에도 규칙이 유지되도록 설정하고 싶을 때
sudo netfilter-persistent save
sudo netfilter-persistent reload

 

 

로드 밸런서와 VM 연결하기

[Target instances] 탭으로 이동해서, 로드밸런서에 VM 을 연결(Attach)해 줍니다.

 

Attach 가 완료됐다는 문구가 나오면, 로드밸런서에 부여된 DNS 주소로 브라우저에서 접속 시 정상 접속 되는 걸 확인할 수 있습니다.

 

 

외부에서 VM 의 Public ip 로 접속하는 것 차단하기

보안 관련해서 추가하면 좋은 설정 사항인데요.

로드밸런서를 생성한 이유 중 하나는 HTTPS 로 접속하게 하기 위함이었는데요.

문제는, VM 자체의 public ip 가 여전히 존재하기에 누군가는 다이렉트로 VM 에  HTTP 로 들어올 수 있는 상태입니다.

 

그 상황을 막기 위해서 80포트를 Firewall 설정에서 제거해 줍니다.

 

 

로드밸런서 -> VM 으로의 통신도 80포트라고 해서 이 경로도 차단되는거 아닌가 싶을 수 있는데요.

로드밸런서와 VM 은 public ip 로 소통하는게 통신하는게 아닌, private ip 로 통신하기 때문에 Firewall 설정에서 80 포트를 제거하는 것에는 영향을 받지 않습니다. Firewall 에서 설정한 포트 노출 여부는 전부 public 에 관한 설정이기 때문입니다.

 

 

도메인 구입하기

[Domains & DNS] > [Create a DNS Zone] 클릭

 

 

Domain name 을 등록해 줍니다. (과금 되니까 주의!)

단 하나밖에 없는 unique 한 도메인으로 선정해야 합니다.

2024년 기준 $14 (= ₩21,559)이 바로 결제되었습니다.

 

 

  • Automatic domain renewal: 만기 (ex. 1년) 가 되었을 때, 자동으로 해당 도메인 유효기간이 갱신되도록 할 것인지 여부 입니다. 진짜 실사용 서비스에서는 도메인 안 뺏기려면, 체크해 줍니다.
  • Domain contact information 도 작성해 줍니다.

 

 

 

마지막으로 [Register domain] 버튼을 눌러 도메인 등록을 완료합니다. 

 

 

 

다시 [Domains & DNS] 탭으로 가보면 도메인 등록이 진행 중인 걸 볼 수 있습니다.

 

 

도메인을 로드밸런서에 연결해보고 SSL 적용해서 HTTPS 로 받기

 

이제 로드밸런서에서 인증서를 생성해 봅시다.

[Networking] -> [Custom domains] -> [Create certificate] 클릭합니다.

 

 

 

최대 10개의 subdomain 을 등록할 수 있는 창이 뜨는데요.

저는 kongs-rim.com, www.kongs-rim.com 이 2개만 subdomain 으로 등록하겠습니다.

 

※ 추후에 다양한 subdomain 을 등록할 일이 생길 수 있습니다.

(등록 예시)

kongs-rim.com : 프론트엔드 소스 연결

api.kongs-rim.com: 백엔드 API 연결

admin.kongs-rim.com: 어드민 페이지 연결

[Create certificate] 버튼을 누르면, 

지금 만드려는 이 인증서가 유효한 지 체크해 보겠다는 문구가 뜹니다.

DNS의 CNAME 레코드를 생성해서 검증을 해보겠다라는 뜻입니다.

 

 

[Validation details] 토글을 펼쳐보면 CNAME key와 value 값이 할당된 걸 볼 수 있습니다.

 

 

[Domains & DNS] 탭  > [DNS records] 로 이동합니다.

위에서 생성된 CNAME key, value 값이 자동으로 생성된 것을 볼 수 있습니다

(원래 정석대로라면 Certificate 생성 후에, AWS Route53 에서 직접 DNS records 를 생성해주어야 합니다. Lightsail 이 이 모든 과정을 대신 해준 거라고 볼 수 있죠 :0 !!)

 

[Networking] 탭으로 돌아가서,

status: valid 표시로 바뀌면,  "Attach" 를 클릭합니다. 

 

로드밸런서에 Attach 가 완료되면 Valid, in use 로 문구가 바뀐 걸 볼 수 있습니다. 

 

 

[Add domain assignment] 를 클릭하면, 로드밸런서에 연결이 최종적으로 완료됩니다.

 

도메인을 클릭해서 들어가봅니다.

 

 

두 도메인 다 로드밸런서에 연결된 걸 볼 수 있습니다.