我已经从我的应用程序服务器设置了一个代理到一个专用的s3存储区来caching请求。 在s3拒绝我的下载请求(403禁止)时,我遇到了一些麻烦,经过一些实验,看起来禁用caching允许有效的请求通过。 但是代理的全部目的是作为一个caching。 我猜这个代理以某种方式改变了这个请求,但我不明白怎么做。 有没有人有任何洞察如何启用caching在Nginx中改变请求,如果有什么办法来超过这个?
这是相关的configuration。
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;
Nginx对于来自S3的caching响应已经足够好了,它也支持按需caching失效,例如:
curl -I 'https://domain/s3/file.jpg' -H 'Cache-Purge: 1'
在caching代理的情况下,如果响应已经在磁盘上(基于代理目录+响应的md5的文件名),Nginx不会对S3执行后续的HTTP请求。
看看那里的完整configuration: https : //gist.github.com/mikhailov/9639593