我已经设置了从我的应用服务器到私有 s3 bucket 的代理来缓存请求。我遇到了一些问题,s3 拒绝了我的下载请求(403 禁止),经过一些实验后,似乎禁用缓存可以让有效的请求通过。但代理的全部用途是作为缓存。我猜代理在某种程度上改变了请求,但我不明白是怎么回事。有谁知道在 nginx 中启用缓存会如何改变请求,以及是否有办法解决这个问题?
这是相关配置。
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;
答案1
Nginx 足以应付来自 S3 的缓存响应,它还支持按需缓存失效,例如:
curl -I 'https://domain/s3/file.jpg' -H 'Cache-Purge: 1'
如果响应已在磁盘上(基于代理目录的文件名 + 响应的 md5),则缓存代理 Nginx 不会向 S3 发出后续 HTTP 请求。
请参阅那里的完整配置:https://gist.github.com/mikhailov/9639593