S3 웹 사이트 리디렉션 위치 뒤에 CloudFront가없는 이유는 무엇입니까?


18

Amazon S3에서 호스팅되는 웹 사이트가 있습니다. WordPress에서 호스팅되는 이전 웹 사이트의 새 버전입니다.

Website Redirect Location이전 위치를 처리하고 새 웹 사이트 페이지로 리디렉션하기 위해 메타 데이터 로 일부 파일을 설정했습니다 .

예를 들어 : 나는 http://www.mysite.com/solution리디렉션 할 필요 가 있었으므로 올바른 메타 데이터로 버킷 안에 http://mysite.s3-website-us-east-1.amazonaws.com/product.html빈 파일을 만들었습니다 solution.

Website Redirect Location= /product.html

S3 리디렉션 메타 데이터는 301 Moved PermanentlySEO에 적합한 것과 동일합니다 . 이것은 S3 도메인에서 직접 URL에 액세스 할 때 효과적입니다.

또한 웹 사이트 버킷을 기반으로 CloudFront 배포를 설정했습니다. 배포를 통해 액세스하려고하면 리디렉션이 작동하지 않습니다. 예 :

http://xxxx123.cloudfront.net/solution 리디렉션하지 않고 대신 빈 파일을 다운로드하십시오.

그래서 제 질문은 CloudFront 배포를 통해 리디렉션을 유지하는 방법입니다. 또는 SEO를 악화시키지 않고 리디렉션을 처리하는 방법에 대한 아이디어가 있습니까?

감사

답변:


47

최근 에이 문제가 발생하여 작동하는 것처럼 보이는 해결 방법을 찾았습니다.

버킷 호스트 이름 대신 S3 정적 웹 사이트 호스트 이름을 가리키는 사용자 지정 오리진을 사용하여 Cloudfront 배포를 생성했습니다. OP의 경우 원하는 원점이 될 것입니다.

mysite.s3-website-us-east-1.amazonaws.com

버킷이 실제로 리디렉션을 제공하지 않기 때문에 오리진으로 버킷을 사용하여 Cloudfront 배포를 치면 작동하지 않습니다. 파일 만 제공하고 메타 데이터를 저장합니다.

희망이 도움이됩니다.


Cloudfront는 리디렉션 응답을 따르지 않고 캐시합니다. 결과적으로 Cloudfront를 우회하도록 리디렉션 한 리소스 다운로드
tfischbach 2016 년

2
bmatsuo-우리가 당신에게 이것에 대해 10 억의 담당자를 줄 수 있다면, 우리는 할 것입니다. 정말 고맙습니다. 당신은 정말 하루를 저장했습니다.
snipe

이것은 많은 도움이되었습니다! S3를 처음 접하는 사람이라면 정적 버킷을 만들려면 버킷으로 이동하여 속성 탭을 방문하십시오. 정적 웹 사이트 호스팅을 클릭하십시오. 전달할 수있는 올바른 URL을 제공합니다. :)
rick6

2

분석

문서화 된 요청 및 응답 동작 및 사용자 지정 오리진에 대해 지원되는 HTTP 상태 코드에 따르면 Amazon CloudFront 는 불행하게도 리디렉션을 따르지 않습니다 .

[...] 리디렉션을 구성한 후 최종 사용자가 처음으로 객체에 대한 요청을 제출하면 CloudFront Front는 요청을 오리진에 보내고 오리진은 리디렉션으로 응답합니다 (예 : 302 Moved Temporarily). CloudFront는 리디렉션을 캐시하고 최종 사용자에게 반환합니다. CloudFront는 리디렉션을 따르지 않습니다. [강조 광산]

물론, 사용자 지정 오리진 대신 Amazon S3를 사용 하고 있으며 Amazon S3 오리진에 대한 요청 및 응답 동작 에는 관련 섹션이 없지만, Amazon S3 리디렉션이 상당히 최근에 추가 된 경우 ( Amazon S3-웹 사이트 지원 참조) 리디렉션은 ), 그냥 여전히 누락 될 수 있습니다.

따라서 나는 당신이 HTTP 상태 코드 200 OK 라는 빈 파일을받지 못한다고 추측합니다 . HTTP 상태 301 은 전혀 시체없이 영구적 으로 움직 였습니다. 실제로 브라우저를 사용하여 또는 결국 같은 명령 줄 도구로만 이것을 확인 했습니까? 예 : cURL 또는 HTTPie ? 후자의 도구는 일반적으로 리디렉션을 따르기 위해 명시 적 매개 변수가 필요하므로 쉽게 눈에 띄지 않을 수 있습니다.

잠재적 인 해결책

분석이 올바른 것으로 판명되면 CloudFront를 명시 적으로 대상으로 지정하도록 리디렉션을 구성해야합니다. 다시 리디렉션을 참조하십시오 .

요청을 다음 위치 중 하나로 리디렉션하도록 웹 서버를 구성 할 수 있습니다.

  • 오리진 서버에서 오브젝트의 새 URL입니다. 최종 사용자가 새 URL로 리디렉션을 수행하면 최종 사용자는 CloudFront를 바이 패스하고 원래 위치로 바로 이동합니다. 결과적으로 요청을 오리진에있는 객체의 새 URL로 리디렉션하지 않는 것이 좋습니다.

  • 객체의 새로운 CloudFront URL입니다. 최종 사용자가 새 CloudFront URL이 포함 된 요청을 제출하면 CloudFront는 오리진의 새 위치에서 객체를 가져 와서 엣지 로케이션에서 캐시하여 최종 사용자에게 반환합니다. 이후의 객체 요청은 엣지 로케이션에서 제공됩니다. 이렇게하면 원점에서 객체를 요청하는 뷰어와 관련된 대기 시간 및로드가 방지됩니다. 그러나 객체에 대한 모든 새로운 요청에는 CloudFront에 대한 두 개의 요청에 대한 요금이 부과됩니다.


CloudFront 배포를 통해 리디렉션해야하는 URL을 컬링하면 다음과 같은 결과 HTTP/1.0 200 OK Content-Type: application/octet-stream Content-Length: 0 가 나타납니다. 리디렉션은 S3에서 관리하며이 경우 파일은 CloudFront에서 호스팅되며 S3에 대해 설정된 리디렉션 헤더는 S3으로 설정하지 않습니다. 메타 데이터 이외의 리디렉션을 매핑 할 수없는 파일의 웹 서버입니다.
Yannick Chaze
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.