首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nginx代理缓存对s3的无效请求

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

Stack Overflow用户
提问于 2014-11-09 07:12:21
回答 1查看 3.9K关注 0票数 1

我已经从我的应用服务器设置了一个代理到一个私有的s3桶来缓存请求。在s3拒绝我的下载请求(403被禁止)的情况下,我遇到了一些麻烦,经过一些实验,禁用缓存似乎允许有效的请求通过。但是代理的全部目的是作为缓存。我猜代理在某种程度上改变了请求,但我不明白是怎么回事。有没有人知道在nginx中启用缓存是如何改变请求的,如果有办法克服这一点的话?

这是相关的配置。

代码语言:javascript
复制
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测试服务器的运行。

工作..。

代码语言:javascript
复制
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"

不工作..。

代码语言:javascript
复制
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"
EN

回答 1

Stack Overflow用户

发布于 2014-11-09 17:26:00

如果AWS S3拒绝请求(HTTP403),源调用无效,这不是缓存或Nginx问题。在您的示例中,Nginx本身通过http (80端口)访问S3,确保您的S3 URL创建为不使用HTTPS访问。当然,让proxy_pass https://..

这个指令proxy_pass_request_headers不是必需的,默认情况下,代理缓冲也是打开的。强烈建议启用访问/错误日志。

要使用HTTP1.1,保持后端活动并执行缓存,请使用以下指令:

代码语言:javascript
复制
location / {
  proxy_http_version     1.1;
  proxy_set_header       Connection "";
  proxy_set_header       Host 'MY_BUCKET.s3.amazonaws.com';
  proxy_set_header       Authorization '';
  proxy_hide_header      x-amz-id-2;
  proxy_hide_header      x-amz-request-id;
  proxy_hide_header      Set-Cookie;
  proxy_ignore_headers   Set-Cookie;

  proxy_cache            S3_CACHE;
  proxy_cache_valid      200 24h;
  proxy_cache_valid      403 15m;
  proxy_cache_bypass     $http_cache_purge;
  add_header             X-Cached $upstream_cache_status;

  proxy_pass             http://MY_BUCKET.s3.amazonaws.com/;

  access_log             s3.access.log;
  error_log              s3.error.log;
}

缓存失效通过HTTP报头缓存-清除工作,因此报头X-缓存分别根据完整的请求或从缓存中检索来显示丢失/命中。要执行缓存无效,只需执行:

代码语言:javascript
复制
curl -I 'http://your_server.com/file' -H 'Cache-Purge: 1'

选择适当的S3端点以避免DNS重定向是很重要的:

代码语言:javascript
复制
us-east-1       s3.amazonaws.com
us-west-2       s3-us-west-2.amazonaws.com
us-west-1       s3-us-west-1.amazonaws.com
eu-west-1       s3-eu-west-1.amazonaws.com  
eu-central-1    s3.eu-central-1.amazonaws.com
ap-southeast-1  s3-ap-southeast-1.amazonaws.com
ap-southeast-2  s3-ap-southeast-2.amazonaws.com
ap-northeast-1  s3-ap-northeast-1.amazonaws.com
sa-east-1       s3-sa-east-1.amazonaws.com
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26825933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档