요청을 캐시하기 위해 응용 프로그램 서버에서 개인 s3 버킷으로 프록시를 설정했습니다. s3가 내 다운로드 요청 (403 금지됨)을 거부하고 몇 가지 실험을 한 후 캐시 기능을 사용 중지하면 유효한 요청이 통과되는 것으로 보이는 문제가있었습니다. 그러나 프록시의 전체 목적은 캐시입니다. 나는 프록시가 어떤 식 으로든 요청을 변경하고 있다고 생각하지만 어떻게 이해할 수는 없다. 누구든지 nginx에서 요청을 변경하는 캐싱을 사용하는 방법에 대한 통찰력을 갖고 있으며이 문제를 해결할 방법이 있는지 알고 싶습니까?Nginx 프록시 캐시가 s3에 대한 요청을 무효화합니다.
여기는 관련 설정입니다.
http {
proxy_cache_path /home/cache levels=1:2 keys_zone=S3_CACHE:10m inactive=24h max_size=500m;
proxy_temp_path /home/cache/tmp;
server {
server_name my-cache-server.com;
listen 80;
proxy_cache S3_CACHE;
location/{
proxy_buffering on;
proxy_pass http://MY_BUCKET.s3.amazonaws.com/;
proxy_pass_request_headers on;
}
}
}
나는 다음 헤더가 통과 허용하는 첫 번째 경우 여기 proxy_cache S3_CACHE;
이 proxy_cache 비활성화 대와의 nginx 액세스 로그의 차이가 활성화되어 라인 ..., 그리고 GET을 제거하는 경우 요청을 만들어 이미지를 반환합니다. 두 번째 경우
MY_IP - - [09/Nov/2014:23:19:04 +0000] "HEAD https://MY_BUCKET.s3.amazonaws.com/Test%20image.jpg
HTTP/1.1" 200 0 "-" "aws-sdk-nodejs/2.0.23 darwin/v0.10.32"
MY_IP - - [09/Nov/2014:23:19:04 +0000] "GET https://MY_BUCKET.s3.amazonaws.com/Test%20image.jpg
HTTP/1.1" 200 69475 "-" "aws-sdk-nodejs/2.0.23 darwin/v0.10.32"
작동하지 않는 (캐시 사용으로) 헤더가 전송 된 후
WORKING를 실행 performance.vidigami.com 테스트 서버 중지 403 오류 발생 거부 ...
MY_IP - - [09/Nov/2014:23:20:08 +0000] "HEAD https://MY_BUCKET.s3.amazonaws.com/Test%20image.jpg
HTTP/1.1" 403 0 "-" "aws-sdk-nodejs/2.0.23 darwin/v0.10.32"
글쎄, 그건 정확히 무슨 일이 일어나고 있는지입니다. proxy_cache 줄을 추가하면 요청이 유효하지 않지만 제거 할 때 그렇지 않습니다. 따라서 원래 요청에 문제가 있다고 생각하지 않습니다. 또한 내가 게시 한 스 니펫이 있지만 앞에서 설명한 것처럼 개인 버킷을 사용하고 있으므로 sdk가 승인을 보내면 헤더가 그대로 유지되어야합니다. 승인을 제거하면 요청이 무효화됩니다. 또한 ...'proxy_pass_headers'가 없으면 요청은 무효화되고 실제로 어떤 방식 으로든 프록시를 통해 요청을 허용하는 유일한 행입니다. – AllTheTime
프로덕션 환경에서 1 년 넘게 작동하는 구성을 게시 했으므로이 구성이 올바르게 작동한다고 생각합니다. 내가 아는 유일한 것, 개인 파일 URL에는 인수가 있습니다. http : //MY_BUCKET.s3.amazonaws.com/$uri$is_args$args; 인수는 기본적으로 프록시로 인해 생략됩니다. – Anatoly
들어오는 요청의 정확한 URL을 프록시에 기록 할 수 있습니까? 왜냐하면 나는 그것이 인자없이 파일명 일 뿐이므로 개인용 버킷에 접근하기위한 실제 인증 정보는 헤더에서 보내지는 것이고, 예를 들어'Authorization '';은 코드에서 S3에 의해 수신 될 필요가있다. '권한 'ACCESS_KEY : SIGNATURE'는 SDK에 의해 생성됩니다. 인증 헤더를 파기하는 경우 어떻게 인증 할 수 있습니까? – AllTheTime