메뉴
Amazon Simple Storage Service
개발자 안내서 (API Version 2006-03-01)

버킷의 가상 호스팅

가상 호스팅은 단일 웹 서버로부터 여러 웹 사이트를 제공하는 일반적인 예입니다. 사이트를 구분하는 한 가지 방법은 URI의 경로 이름 부분 대신 요청의 명백한 호스트 이름을 사용하는 것입니다. 일반적인 Amazon S3 REST 요청은 요청 -URI 경로의 슬래시로 구분된 구성 요소를 사용하여 버킷을 지정합니다. 또는 Amazon S3 가상 호스팅을 통해 HTTP Host 헤더를 사용하여 REST API 호출 버킷을 처리할 수 있습니다. 실제로 Amazon S3는 Host의 의미를 http://bucketname.s3.amazonaws.com에서 대부분의 버킷이 제한된 요청 유형에 대해 자동으로 액세스가 가능하다고 해석합니다. 또한 등록된 도메인 이름 뒤에 버킷을 이름 지정하고 해당 이름을 Amazon S3용 DNS 별칭으로 만들어 Amazon S3 리소스의 URL을 http://my.bucketname.com//처럼 완전하게 사용자 지정할 수 있습니다.

사용자 지정 URL 외에도 가상 호스팅의 또 다른 장점은 버킷 가상 서버의 "루트 디렉터리"에 게시할 수 있는 기능입니다. 이 기능은 기존의 많은 애플리케이션이 이 표준 위치에서 파일을 검색하기 때문에 중요할 수 있습니다. 예를 들어 favicon.ico, robots.txt, crossdomain.xml은 모두 루트에서 검색될 수 있습니다.

중요

Amazon S3는 모든 리전에서 버킷 액세스에 대해 가상 호스팅 방식과 경로 방식 액세스를 지원합니다. 하지만 경로 방식 구문을 사용할 경우 버킷에 액세스할 때 리전별 엔드포인트를 사용해야 합니다. 예를 들어 EU(아일랜드) 리전에 mybucket이라는 버킷이 상주하고 경로 방식 구문을 사용하려는 경우 객체 이름이 puppy.jpg이면 올바른 URI는 http://s3-eu-west-1.amazonaws.com/mybucket/puppy.jpg입니다.

다음 중 하나를 사용하는 경로 방식 구문으로 미국 동부(버지니아 북부) 리전 외부의 버킷에 액세스하려고 할 경우 리소스에 대한 올바른 URI를 나타내는 메시지, HTTP 응답 코드 307 임시 리디렉션이 수신됩니다.

  • http://s3.amazonaws.com

  • 버킷이 상주하는 리전이 아닌 다른 리전의 엔드포인트. 예를 들어 미국 서부(캘리포니아 북부 지역) 리전에 생성한 버킷에 http://s3-eu-west-1.amazonaws.com을 사용하는 경우.

참고

리전별 엔드포인트(예: s3-eu-west-1.amazonaws.com) 대신 미국 동부(버지니아 북부) 엔드포인트(s3.amazonaws.com)를 사용하는 경우, Amazon S3는 기본적으로 가상 호스트 유형의 모든 요청을 미국 동부(버지니아 북부) 리전으로라우팅합니다. 어느 리전에든 버킷을 만들면 Amazon S3는 DNS를 업데이트하여 요청을 올바른 위치로 라우팅하며, 이로 인해 시간이 걸릴 수 있습니다. 동시에, 기본 규칙이 적용되어 가상 호스팅 방식 요청이 미국 동부(버지니아 북부) 리전으로 라우팅되면 Amazon S3는 HTTP 307을 통해 이를 올바른 리전으로 리디렉션합니다. 자세한 내용은 요청 리디렉션 및 REST API 섹션을 참조하십시오.

SSL과 함께 가상 호스팅 방식의 버킷을 사용할 경우, SSL 와일드카드 인증서는 마침표를 포함하지 않는 버킷에만 매핑됩니다. 이 문제를 해결하려면 HTTP를 사용하거나, 인증서 확인 로직을 직접 작성합니다.

HTTP 호스트 헤더 버킷 사양

GET 요청이 SSL 엔드포인트를 사용하지 않는 한 HTTP Host 헤더를 사용하여 요청에 대한 버킷을 지정할 수 있습니다. REST 요청의 Host 헤더는 다음과 같이 해석됩니다.

  • Host 헤더가 생략되었거나 그 값이 's3.amazonaws.com'이면, 요청 버킷은 요청-URI의 슬래시로 구분된 첫 번째 구성 요소가 되고 요청 키는 요청-URI의 나머지 부분이 됩니다. 이는 일반적인 메서드로 이 단원의 첫 번째 예제와 두 번째 예제에 나와 있습니다. 호스트 헤더를 생략하는 것은 HTTP 1.0 요청에만 유효합니다.

  • 또는 Host 헤더 값이 '.s3.amazonaws.com'으로 끝나는 경우 버킷 이름이 Host 헤더 값에서 '.s3.amazonaws.com'까지의 선행 구성 요소가 됩니다. 요청에 대한 키는 요청-URI입니다. 이 해석은 이 단원의 세 번째와 네 번째 예제에 나와 있는 것처럼 버킷을 s3.amazonaws.com의 하위 도메인으로 표시합니다.

  • 그렇지 않은 경우 요청에 대한 버킷은 Host 헤더의 소문자 값이며 요청에 대한 키는 요청-URI입니다. 이 해석은 버킷 이름과 같은 DNS 이름을 등록하고 이 이름을 Amazon S3용 CNAME 별칭으로 구성한 경우에 유용합니다. 도메인 이름 등록 및 DNS 구성 절차는 본 가이드에서 다루지 않지만, 이 단원의 마지막 예제에 나와 있습니다.

예제

이 단원은 예제 URL 및 요청을 제공합니다.

예 경로 방식 메서드

이 예제는 버킷 이름으로 johnsmith.net을 사용하고, 키 이름으로 homepage.html을 사용합니다.

URL은 다음과 같습니다.

Copy
http://s3.amazonaws.com/johnsmith.net/homepage.html

요청은 다음과 같습니다.

Copy
GET /johnsmith.net/homepage.html HTTP/1.1 Host: s3.amazonaws.com

HTTP 1.0을 사용한 요청 및 host 헤더 생략은 다음과 같습니다.

Copy
GET /johnsmith.net/homepage.html HTTP/1.0

DNS를 준수하는 이름에 대한 자세한 내용은 제한 사항을 참조하십시오. 키에 대한 자세한 내용은 를 참조하십시오.

예 가상 호스팅 방식 메서드

이 예제는 버킷 이름으로 johnsmith.net을 사용하고, 키 이름으로 homepage.html을 사용합니다.

URL은 다음과 같습니다.

Copy
http://johnsmith.net.s3.amazonaws.com/homepage.html

요청은 다음과 같습니다.

Copy
GET /homepage.html HTTP/1.1 Host: johnsmith.net.s3.amazonaws.com

가상 호스팅 방식 메서드는 DNS를 준수하는 버킷 이름이 필요합니다.

예 미국 동부(버지니아 북부) 외 리전의 버킷에 대한 가상 호스팅 방식 메서드

이 예제는 EU(아일랜드) 리전의 버킷 이름으로 johnsmith.eu를 사용하고, 키 이름으로 homepage.html을 사용합니다.

URL은 다음과 같습니다.

Copy
http://johnsmith.eu.s3-eu-west-1.amazonaws.com/homepage.html

요청은 다음과 같습니다.

Copy
GET /homepage.html HTTP/1.1 Host: johnsmith.eu.s3-eu-west-1.amazonaws.com

또한 리전별 엔드포인트를 사용하는 대신, 버킷이 있는 리전과 상관없이 미국 동부(버지니아 북부) 리전 엔드포인트를 사용할 수도 있습니다.

Copy
http://johnsmith.eu.s3.amazonaws.com/homepage.html

요청은 다음과 같습니다.

Copy
GET /homepage.html HTTP/1.1 Host: johnsmith.eu.s3.amazonaws.com

예 CNAME 메서드

이 예제는 버킷 이름으로 www.johnsmith.net을 사용하고, 키 이름으로 homepage.html을 사용합니다. 이 메서드를 사용하려면 DNS 이름을 bucketname.s3.amazonaws.com용 CNAME 별칭으로 구성해야 합니다.

URL은 다음과 같습니다.

Copy
http://www.johnsmith.net/homepage.html

예제는 다음과 같습니다.

Copy
GET /homepage.html HTTP/1.1 Host: www.johnsmith.net

Amazon S3 URL을 CNAME으로 사용자 지정

필요에 따라 웹 사이트 또는 서비스에 "s3.amazonaws.com"이 표시되지 않게 할 수도 있습니다. 예를 들어 Amazon S3에 웹 사이트 이미지를 호스팅할 경우, http://johnsmith-images.s3.amazonaws.com/. 대신 http://images.johnsmith.net/을 선호할 수 있습니다.

버킷 이름은 CNAME과 동일해야 합니다. 그러므로 CNAME를 생성하여 images.johnsmith.netimages.johnsmith.net.s3.amazonaws.com에 매핑한다면 http://images.johnsmith.net/filenamehttp://images.johnsmith.net.s3.amazonaws.com/filename과 동일할 것입니다.

DNS를 준수하는 이름의 버킷은 http://[BucketName].s3.amazonaws.com/[Filename]과 같이 참조될 수 있습니다(예: http://images.johnsmith.net.s3.amazonaws.com/mydog.jpg). CNAME을 사용하여 images.johnsmith.net을 Amazon S3 호스트 이름으로 매핑함으로써 이전 URL이 http://images.johnsmith.net/mydog.jpg가 될 수 있습니다.

CNAME DNS 레코드는 도메인 이름으로 적절한 가상 호스팅 방식 호스트 이름의 별칭을 사용해야 합니다. 예를 들어 버킷 이름과 도메인 이름이 images.johnsmith.net이면 CNAME 레코드는 images.johnsmith.net.s3.amazonaws.com.

Copy
images.johnsmith.net CNAME images.johnsmith.net.s3.amazonaws.com.

별칭 대상을 s3.amazonaws.com으로 설정해도 되지만 그러면 HTTP 리디렉션이 늘어날 수 있습니다.

Amazon S3는 호스트 이름을 사용하여 버킷 이름을 확인합니다. 예를 들어 www.example.comwww.example.com.s3.amazonaws.com. http://www.example.com을 액세스하는 경우, Amazon S3는 다음과 같은 요청을 받습니다.

Copy
GET / HTTP/1.1 Host: www.example.com Date: date Authorization: signatureValue

Amazon S3는 원래 호스트 이름www.example.com만을 보고 요청을 해결하기 위해 사용한 CNAME 매핑을 인식하지 못하기 때문에 CNAME 및 버킷 이름은 동일해야 합니다.

모든 Amazon S3 엔드포인트는 CNAME에서 사용할 수 있습니다. 예를 들어 s3-ap-southeast-1.amazonaws.com은 CNAME에서 사용될 수 있습니다. 엔드포인트에 대한 자세한 내용은 요청 엔드포인트를 참조하십시오.

CNAME을 사용하여 호스트 이름과 Amazon S3 버킷을 연결하려면

  1. 제어하는 도메인에 속한 호스트 이름을 선택합니다. 이 예제는 johnsmith.net 도메인의 images 하위 도메인을 사용합니다.

  2. 호스트 이름과 일치하는 버킷을 만듭니다. 이 예제에서 호스트 및 버킷 이름은 images.johnsmith.net입니다.

    참고

    버킷 이름은 호스트 이름과 정확하게 일치해야 합니다.

  3. Amazon S3 버킷에 대한 별칭으로 호스트 이름을 정의하는 CNAME 레코드를 만듭니다. 예:

    images.johnsmith.net CNAME images.johnsmith.net.s3.amazonaws.com

    중요

    요청 라우팅으로 인해, CNAME 레코드는 앞의 예제에 나와 있는 것처럼 정확하게 정의해야 합니다. 그렇지 않은 경우 제대로 작동하는 것처럼 보일 수 있으나 결국 예기치 않은 동작이 발생합니다.

    참고

    DNS를 구성하는 절차는 해당 DNS 서버나 DNS 공급자에 따라 다릅니다. 자세한 내용은 서버 설명서를 참조하거나, 제공자에게 문의하십시오.

제한

HTTP Host 헤더 요청에 대한 버킷 지정은 비 SSL 요청 및 REST API 요청에서도 가능합니다. 다른 엔드포인트를 사용하여 SOAP에서 버킷을 지정할 수 없습니다.

참고

HTTP를 통한 SOAP 지원은 중단되었지만 HTTPS를 통해 계속해서 사용할 수 있습니다. 새로운 Amazon S3 기능은 SOAP에 대해 지원되지 않습니다. REST API 또는 AWS SDK를 사용하는 것이 좋습니다.

이전 버전과의 호환성

Amazon S3의 초기 버전은 잘못하여 HTTP Host 헤더를 무시했습니다. 이렇게 문서화되지 않은 동작에 따른 애플리케이션은 Host 헤더를 정확하게 설정하여 업데이트해야 합니다. Amazon S3는 버킷 이름이 있을 경우 Host에서 버킷 이름을 확인하기 때문에 예기치 않은 NoSuchBucket 오류 결과 코드를 받을 수 있습니다.