我已經建立了從我的應用程序服務器的代理私人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請求返回圖像。在第二種情況下(啓用緩存)的頭被髮送,然後被拒絕,導致403錯誤,停止運行
工作performance.vidigami.com測試服務器...
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"
不工作...
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 2014-11-09 19:51:11
我發佈了超過一年的生產環境,所以我確信這個配置可以正常工作。唯一我沒有注意到的是,私人文件URL有參數:http://MY_BUCKET.s3.amazonaws.com/$uri$is_args$args;由於默認代理,參數省略。 – Anatoly 2014-11-09 20:20:23
有沒有辦法在代理上記錄傳入請求的確切URL?因爲我非常肯定它只是沒有參數的文件名,並且訪問私有存儲區的實際認證信息正在頭中發送,例如'Authorization';'需要由S3代碼接收'授權'ACCESS_KEY:SIGNATURE'由sdk構建。如果您銷燬授權標題,它如何可能進行身份驗證? – AllTheTime 2014-11-09 22:24:18