2013-06-14 6 views
0

사용자가 사진을 업로드하고 나중에 볼 수있는 사진 사이트를 만들고 있습니다. 이 사진들은 공개되지 않습니다. S3에 사진과 미리보기 이미지를 저장하려고합니다. 현재 내가 수행중인 구현은 사용자가 페이지에 오면 축소판의 서명 된 URL과 S3에서로드 된 URL을 제공한다는 것입니다 (하지만 클라우드 프론트의 서명 된 URL 사용에 대해서도 생각하고 있습니다). 다른 URL이 각각의 썸네일을 위해 제공되는 각각의 요청에이미지 저장 S3에서 안전하게 작업하기

  • 때문에 브라우저 캐시를 사용할 수 없습니다 :

    문제들은 지금. 이렇게하면 사용자가 사이트를 새로 고칠 때 브라우저가 각 이미지를 다시로드합니다. 그것은 우리 페이지를 느리게 만듭니다.

  • 다른 사람이 출처로 스누핑하면 모든 사람이 사진의 서명 된 URL을 찾아보고 다른 사람에게 배포 할 수 있습니다 (서명 된 URL은 10 분 동안이지만). 내가 선호하는 방식은 사용자가 허용해야하는지 여부를 결정할 수 있도록 응용 프로그램에서 URL을 전달하는 것입니다.

내가 취해야 할 접근법을 도와주세요. 페이지 로딩 시간을 빠르게하고 보안 문제도 다루고 싶습니다. 클라우드 프론트에서 제공하는 서비스가 브라우저 캐시보다 빠르다는 것을 알고 싶습니다 (매번 다른 서명 된 URL에 대해서도 읽었습니다). 답을 구체적으로 설명하십시오.

+0

가능한 중복 (https://stackoverflow.com/questions/17516820/serve-files-in-s3-in-express-nodejs-app) –

답변

1

나는 당신이 원하는 것에 대한 완벽한 대답은 없다고 생각합니다. 임의의 아이디어/장단점 :

1) HTTPS로 전환합니다. 그렇게하면 URL을 스니핑하는 사람들을 무시할 수 있습니다. 그러나 HTTPS 항목은 브라우저에서 매우 오랫동안 캐시 될 수 없습니다.

2) 서명 된 URL을 제공하는 경우 expires = "time + 10m"을 설정하지 말고 "time + 20m and nearest nearest 10m"으로 설정하십시오. 이렇게하면 URL은 적어도 10m 이상 일정하며 브라우저는이를 캐시 할 수 있습니다. S3의 파일에 expires : 헤더를 설정하여 브라우저가 캐시 할 수 있음을 알 수 있도록하십시오.

3) 모든 URL을 프록시 할 수 있습니다. 브라우저가 서버의 사진을 요청하도록 요청한 다음 웹 프록시를 작성하여 S3의 사진에 요청을 프록시합니다. 이 과정에서 사용자 인증을 확인하고 S3의 서명 된 URL을 생성하고 로컬에서 사진을 캐시 할 수도 있습니다.이 방법은 사용자에게 "덜 효율적"으로 보이지만 브라우저에서 URL을 원하는만큼 캐시 할 수 있습니다. 또한 사진 URL을 북마크에 추가 할 수 있으므로 사용자에게 편리합니다. 다른 컴퓨터로 옮겨도 서버가 방문하여 사진을 표시하기 전에 로그인하도록 요청할 수 있습니다.

Python Twisted 또는 Node.js와 같은 "이벤트가 발생한"서버를 사용해야합니다. 그렇게하면 서버에서 많은 메모리/CPU를 사용하지 않고 동시에 수천 장의 사진을 프록시 처리 할 수 ​​있습니다. (모든 데이터가 서버를 통과하므로 많은 대역폭을 사용하지만 여러 서버를 실행하여 쉽게 "수평 확장"할 수 있습니다.) 4) Cloudfront는 캐시입니다. CF 서버에서 자원을 처음 요청할 때 속도가 느려집니다 (몇 백 밀리 초). 그러나 두 번째 요청이 캐시 될 것으로 예상하지 마십시오! 각 CF 위치에는 ~ 20 개의 서로 다른 서버가 있으며 매번 무작위로 공격합니다. 따라서 사진을 10 번 요청하면 10 회의 캐시 미스가 생성 될 수 있으며 다음 요청시 캐시 히트 가능성은 50 %입니다. CF는 수백 번 요청 될 인기있는 콘텐츠에만 유용합니다. CF는 사설 CF-to-S3 연결이 일반적인 인터넷보다 좋을 수 있기 때문에 외국 사용자에게 다소 유용합니다.

CF가 보안 검사를 수행하는 방법을 정확히 모르겠습니다. 그러나 S3 인증을 통과하면 (기본값이 아님) 10 분 동안 캐시 될 수있는 URL을 만들기 위해 "mod 10 minutes"트릭을 사용할 수 있습니다.

CF가 "브라우저 캐시보다 빠릅니다"는 것은 불가능합니다. 그러나 브라우저 캐시를 사용하지 않는 경우 CF는 S3보다 빠르지 만 대부분 외국 위치에있을 수 있습니다.

할 어떤 다른 사람들을 살펴보십시오 (즉, 스 머그 머그 (SmugMug) 내가 생각 S3를 사용합니다.) [특급/nodejs 응용 프로그램에 S3에 저장된 게재 파일]의