我已经从我的应用服务器设置了一个代理到一个私有的s3桶来缓存请求。在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;
以下是禁用proxy_cache的nginx访问日志与已启用的.在第一种情况下,头部被传递、接受,然后发出返回图像的get请求。在第二种情况下(启用缓存),报头被发送,然后被拒绝,从而导致一个403个错误,停止performance.vidigami.com测试服务器的运行。
工作..。
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"不工作..。
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"发布于 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,保持后端活动并执行缓存,请使用以下指令:
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-缓存分别根据完整的请求或从缓存中检索来显示丢失/命中。要执行缓存无效,只需执行:
curl -I 'http://your_server.com/file' -H 'Cache-Purge: 1'选择适当的S3端点以避免DNS重定向是很重要的:
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.comhttps://stackoverflow.com/questions/26825933
复制相似问题