메뉴 닫기

S3 Bucket을 활용한 모든 Request에 대하여 redirect 하기

전통적인 웹 사이트를 사용한 리다이렉트 하기

일반적으로 Apache 설정에서 모든 Request에 대하여 리다이렉트를 설정함으로써 해당 도메인으로 Request가 들어오면, 다른 웹 서비스로 리다이렉트하도록 설정하는 방법입니다.

이 부분은 많은 Apache / Tomcat 설정에서 찾아 볼 수 있으므로 이 번에는 아래와 같이 AWS의 Route 53(DNS서비스)과 S3 스토리지의 정적 웹 사이트 호스팅 기능을 활용하는 방법을 알려 드립니다.

AWS S3의 정적 웹 사이트 호스팅을 활용한 리다이렉트 하기

AWS S3에는 “정적 웹 사이트 호스팅”기능을 제공합니다.

사실 스토리지 기능만 제공했다면, 항상 앞단에 CloudFront나 EC2위의 웹서버를 통한 스토리지 접근 방법을 사용해야만 하겠죠.

단순한 다운로드 서비스를 위해 다른 서비스와 연동하기에는 부담(?)을 느낄 사용자분들도 있으실거고.

이를 위해 “정적 웹 사이트 호스팅”기능을 활성화하면 S3 스토리지를 별도의 웹 서버없이 웹 서비스에 사용할 수 있습니다. 물론 Static Contents Download에 적합한 웹 사이트가 되겠죠. ^^

서두가 길었네요. 그러면, 리다이렉트는 어떻게 하느냐?

“정적 웹 사이트 호스팅”기능을 활성화 시키기 위하여 [S3]-[Bucket]-[속성]으로 들어가시면 아래 그림과 같은 설정 화면이 나타납니다.

물론 기본 값은 세번째 기능인 “웹 사이트 호스팅 사용 안 함”이죠.

일반 정적 웹 사이트 호스트 기능을 수행하려면,
첫번째 선택 기능인 “이 버킷을 사용하여 웹 사이트를 호스팅합니다.”를 선택하면 됩니다.

그리고, 해당 버킷으로 요청(Request)가 들어오면 리다이렉트를 수행하려면, 두번째 선택 기능인 “요청 리디렉션”을 선택하면 됩니다. 대상 버킷 또는 도메인에 “www.a-cloud.co.kr”을 프로토콜에 리디렉션된 웹 사이트가 제공하는 프로토콜 “http”나 “https”을 등록하고 설정을 저장하면 됩니다. 저희 사이트가 http를 기본제공하여 http로 설정하고 시험하겠습니다.

그럼 간단히 두번째 기능인 “요청 리디렉션”을 설정하면 되겠는데 요란스럽게 이런 글을 쓸까? 의아해하는 분들에게 이 기능의 부족한 부분을 간략히 설명 드리고 이 글에서 알려 드리고자 했던 사항을 쓰도록 하겠습니다.

두번째 기능을 적용하고 PC의 브라우저에서 test.a-cloud.io를 수행하면, http://www.a-cloud.co.kr로 잘 리다이렉트되는 것을 확인할 수 있었습니다. 그런데, 이 때 test.a-cloud.io/test와 같이 단순 도메인 Request가 아닌 추가적인 URI를 포함한 URL을 request할 수도 있죠. 이 때 우리의 www.a-cloud.co.kr 웹 사이트에 없는 URI의 경우에 404 Not Found에러가 발생하게 됩니다. 즉, S3에서 제공하는 “정적 웹 사이트 호스팅”의 “요청 리디렉션”기능은 Request URL을 무시하는 것이 아니라 호스트 명만 변경해 준다는 점입니다.

그런데 특수한 상황에서 test.a-cloud.io로 Request되는 모든 URL의 응답을 www.a-cloud.co.kr의 기본 페이지(루트 페이지나 별도의 설정되 페이지도 가능)로 리다이렉트하고 싶을 때 처음 위에서 언급한 [전통적인 웹 사이트를 사용한 리다이렉트]를 사용하기에는 좀 아까운 부분이 있죠. ~물론 www.a-cloud.co.kr 웹 서버에 추가 도메인으로 test.a-cloud.io를 등록하고 리다이렉트를 설정할 수도 있지만~ 이 번에 소개드리는 내용은 S3의 Bucket만 설정하면 되는 방법입니다.

설정은 간단합니다. 아래 이미지에서와 같이 위에서 언급한 S3 “정적 웹 사이트 호스팅”의 첫번째 기능을 사용하는 겁니다. 인덱스 문서와 오류 문서를 적당한 URI를 등록하고 목적이 모든 Request를 redirect하게 되기에 실제 파일은 없어도 그만 입니다. 그리고, 이미 눈치채신 분들도 있겠지요. 가장 중요한 부분으로 옵션으로 제공되는 “리디렉션 규칙”을 잘 설정하여 사용해야 합니다. 이에 사용하는 규칙 설명은 AWS S3 사용자 가이드를 확인해 주세요.

역시 이 때 가장 중요한 것이 리디렉션 규칙의 설정이겠죠. 아쉽게도 AWS에서 규칙은 많은 기능을 제공하고 있지는 못합니다. 이 부분이 많은 부분 실험을 통한 수정 보완을 경험하게 했구요. 제공하는 전처리 대체 기능으로 커버하기가 좀 부족하더라구요.

이 때 가장 키 포인트가 되는 아이더어가 전처리 대체로 해시테그를 붙이는 것입니다. 요청 URL의 호스트명뒤에 오는 모든 URI(경로를 포함한 콘텐츠명)를 해시테그로 간주하도록 하는 거죠. ^^

이 후 처리는 리디렉션받는 호스트에서 필요한 URI로 설정만하면 끝!

첨부 파일에 모든 Request를 루트 페이지로 리다이렉트하는 샘플과 /introduce.html로 리다이렉트하는 샘플을 참죠하세요. 즐거운 AWS를 활용한 서비스 구축이 되시기를 바랍니다.

참고로 S3를 AWS Route 53에서 Alias하여 웹 사이트로 사용하시려면, S3의 Bucket을 생성할 때, Bucket명칭을 사용하려는 도메인 명(예; test.a-cloud.io)으로 생성하여야 합니다. ^^