AWS에서 신규 도메인 포워딩 + CloudFront 연동(4)

S3 Ridrection 기능을 사용하여 주소 리다이렉션 처리

S3는 AWS의 매우 강력하고 안정적인 파일 저장 서비스이다. S3의 여러 멋진 기능중의 하나는 정적 호스팅 기능인데, 동적인 컨텐츠가 아닌 정적인 컨텐츠를 호스팅 해주는 기능으로 PHP,JSP등의 동적인 웹사이트가 아닌 HTML/Javascript 기반의 웹페이지 처럼 정적인 웹사이트를 엄청나게 저렴한 비용으로 호스팅해준다.

이전 웹사이트들은 정적인 웹사이트였기 때문에 S3에서 호스팅하였고, 그에 따라 각 도메인에 대응하는 버킷이 이미 호스팅 설정이 된 상태로 존재하였다.

(참고로 Route53에서 S3호스팅 주소로 연결하기 위해서는 도메인과 버킷명이 같아야한다. 즉 example.net을 S3에서 호스팅하려면 버킷명도 example.net이어야 한다.)

그럼 S3의 정적 호스팅기능을 통해 도메인 리다이렉션을 처리해보자.

S3 버킷을 선택후 속성 탭으로 가면 정적 웹 사이트 호스팅이 있다.

S3버킷에서 리다이렉션을 처리는 두 가지 방법이 있다.

  • 웹 사이트를 호스팅하고 리다이렉션 규칙을 적용하기
  • 요청 리다이렉션 사용하기

리다이렉션 규칙 사용

웹사이트를 호스팅하고 리다이렉션 규칙을 적용하는것은 일반적으로 웹 사이트는 호스팅하고 있으나 특정 주소나 상황에 한해서 리다이렉션 규칙을 적용하기를 원할 때 사용한다.

"이 버킷을 사용하여 웹 사이트를 호스팅합니다." 를 클릭하면 리다이렉션 규칙을 사용할 수 있다.

몇 가지 예시로 설명한다.

<RoutingRules>
  <RoutingRule>
  <Condition>
    <KeyPrefixEquals>docs/</KeyPrefixEquals>
  </Condition>
  <Redirect>
    <ReplaceKeyPrefixWith>documents/</ReplaceKeyPrefixWith>
  </Redirect>
  </RoutingRule>
</RoutingRules>

위의 리다이렉션규칙의 경우 docs/ 경로로 들어온 내용에 대해 documents/의 경로로 라우팅 해준다.

<RoutingRules>
  <RoutingRule>
    <Condition>
    <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
    </Condition>
    <Redirect>
      <HostName>www.naver.com</HostName>
    </Redirect>
  </RoutingRule>
</RoutingRules>

위의 규칙의 경우 HTTP404에러(해당파일이 존재하지 않을때)가 발생했을때는 네이버로 라우팅시켜주는 룰이다.
이런식으로 웹사이트 호스팅은 유지하면서 리다이렉션을 하고 싶을때 사용한다.

(자세한 내용은 https://docs.aws.amazon.com/AmazonS3/latest/dev/how-to-page-redirect.html 을 참조)

이번 경우에는 따로 웹사이트를 호스팅하면서 조건에 따라 리다이렉션이 아닌 모든 요청에 대해서 리다이렉션 처리를 하는 것이 목표기 때문에 두번째 옵션인 “요청 리다이렉션”을 사용하도록 한다.

요청 리다이렉션 사용

요청 리다이렉션의 경우 이 버킷호스팅으로 들어온 모든 요청에 대해 리다이렉션을 처리하고 싶을때 유용하다. 이번 작업 내용도 마찬가지로 이전 도메인을 새로운 “회사명.ai”도메인으로 리다이렉션 시키는 것이기 때문에 이 방법을 사용한다.

요청 리다이렉션을 선택하면 요청을 리다이렉션 할 버킷 혹은 도메인을 선택하고 프로토콜 역시 선택 가능하다.

대상 도메인에 새로운 “회사명.ai”를 넣어주고, 프로토콜 역시 https로 넣어준다. 설정후 실제로 잘 들어오는지 Postman으로 테스트 해보았다.

주의할것은 302리다이렉션이 아닌 301 리다이렉션이다.

응답을 까보면 301리다이렉션과 함께 Location Header에 https 프로토콜과 :443포트까지 잘 적용된 리다이렉션 URL을 받아오는 것을 확인할 수 있다.

이것으로 간단하게 리다이렉션 완료.

별도의 서버도 필요없다.

WRITTEN BY
Dev Lead | Certified Professional AWS Solutions Architect/Devops Engineer

댓글