我有一个 Web 应用程序,它使用 awscli 将图像上传到服务器并将其复制到 s3 存储桶。服务器上的 Nginx 通过反向代理从 s3 检索图像。当我尝试使用 url 打开图像时,它给出 403 响应。但从 s3 存储桶 url 打开图像似乎根本没有问题。
这是 nginx 代理配置:
proxy_cache_path /var/www/cache/s3 levels=1:2 keys_zone=s3cache:60m max_size=4G;
server {
listen 80;
server_name img.domain.com;
location / {
limit_except GET { deny all; }
access_log off;
log_not_found off;
proxy_ignore_headers "Set-Cookie";
proxy_hide_header "Set-Cookie";
proxy_set_header cookie "";
proxy_hide_header x-amz-delete-marker;
proxy_hide_header x-amz-id-2;
proxy_hide_header x-amz-request-id;
proxy_hide_header x-amz-version-id;
proxy_hide_header etag;
proxy_cache s3cache;
proxy_cache_valid 200 28d;
proxy_cache_valid 403 24h;
proxy_cache_valid 404 24h;
proxy_intercept_errors on;
error_page 403 404 /404.html;
proxy_pass https://s3.amazonaws.com/bucket/;
add_header X-Cache $upstream_cache_status;
expires max;
}
}
存储桶策略是正确的。有趣的是,我发现在每次批量上传后重新启动 nginx 或在上传后等待数小时,403 响应就会消失。
我是否遗漏了什么或者做错了什么?