2016-10-12 5 views

답변

0

추가 서버를 추가하지 않으면이 작업을 수행 할 수 없습니다.

S3는 정적 인 내용을 지원합니다. ¹은 요청 헤더에 따라 응답이 다릅니다.

CloudFront는 콘텐츠가 요청 헤더에 따라 달라질 필요가있는 경우 원본 서버를 사용합니다. 기본적으로 CloudFront는 대부분의 헤더를 원본으로 전달하지 않지만 캐시 동작 구성에서 변경할 수 있습니다. User-Agent 헤더를 원래 위치로 전달하면 CloudFront는 사용자 에이전트 문자열의 모든 변경이 응답의 변경을 트리거 할 수 있다고 가정해야하기 때문에 캐시 적중률이 급격히 떨어 지므로 캐시의 개체가 특정 사용자 에이전트 문자열에 의해 요청 된 사용자 에이전트 문자열은 동일한 사용자 에이전트 문자열을 사용하여 향후 브라우저에만 제공됩니다. 각기 다른 복사본을 캐시 할 것이지만 여전히 히트 율이 떨어집니다. 일반적인 브라우저 유형 만 알고 싶으면 CloudFront는 실제로 사용자 에이전트 문자열을 전달하지 않고 동일한 부정적인 영향을 미치지 않고 사용자 에이전트가 데스크톱, 스마트 TV, 모바일 또는 태블릿인지 여부를 알 수있는 특수 헤더를 주입 할 수 있습니다 캐시 적중률.

그래서 CloudFront 은 고유 한 각 사용자 에이전트에 대해 적절한 버전의 페이지을 올바르게 캐시하지만 원본 서버는 실제 콘텐츠 선택 로직을 구현해야합니다. 그리고 원점이 S3 인 경우 CloudFront와 S3 사이에 서버가없는 한 지원되지 않습니다. 이 설정은 완벽하게 유효합니다. S3에 요청을 보내기 전에 CloudFront에서받은 요청 경로를 다시 작성한 서버를 사용하여 S3의 콘텐츠를 다시 CloudFront로 반환합니다. CloudFront는 콘텐츠를 브라우저에 반환합니다.

AWS Lambda는 CloudFront와 S3 사이에 필요한 서버 (서버리스 서버) 역할을하는 이와 같은 응용 프로그램의 잠재적 후보가 될 수 있지만 아직까지는 이진 데이터를 지원하지 않습니다. 텍스트가 아닌 옵션이 될 수 있습니다.


¹ 적어도 관련성이있는 것은 아닙니다. CORS와 요청 헤더의 제한된 서브 세트를 기반으로 액세스가 허용 또는 거부 될 때 예외가 존재합니다.

+0

그래서, 더 좋을까요? ec2에서 경로를 다시 작성하거나 S3에서 데이터를 가져 와서 ec2에서 클라우드 프론트로 보내시겠습니까? 그렇다면 클라우드 프런트는 데이터를 어떻게 캐시합니까? 같은 URL이더라도 User-Agent에 따라 응답이 달라지기 때문에? – moeseth

+0

'User-Agent' 헤더를 원점으로 전달하도록 CloudFront를 구성하면 자동으로 페이지의 각기 다른 버전을 캐시하고 정확히 동일한 사용자 에이전트 문자열을 가진 모든 향후 요청자에게 다시 제공합니다. "어떤게 더 좋아?" 그것들은 같은 것을 말하는 두 가지 방법 일뿐입니다. "경로 다시 쓰기"라고 말하면 브라우저 리디렉션을 의미하지 않습니다. 방금 브라우저가 요청한 경로에서 경로를 변경하여 브라우저에서 요청한 것과 다른 경우 S3에서 제공 할 실제 개체를 가져 오는 것입니다. '/ index.html'을/index.firefox.html로 변경하십시오. –

관련 문제