Nginx 代理缓存使对 s3 的请求无效

Nginx 代理缓存使对 s3 的请求无效

我已经设置了从我的应用服务器到私有 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

相关内容