Nginx作为s3代理与私人桶

我正在尝试将Nginx设置为S3上托pipe的静态html / js webapp的代理。 我阅读了大量的教程和post,如果我的存储桶被设置为公开,我可以使其工作。

我需要Nginx作为代理的原因是我不希望我的存储桶公开。

遵循本指南,我添加了这个 GitHub仓库中的set-misc-nginx-module。 额外的模块通过提供AWS密钥和AWS秘密,为桶的每个对象构build经过validation的S3请求。

我重新编译了Nginx,并设法允许它访问受保护的存储桶。 问题是,我无法呈现HTML,基本上我正在与我试图代理桶的XML内容。

这是Nginx的configuration文件

server { listen 80; server_name [MY_DNS]; location * { set $bucket '[MY_BUCKET]'; set $aws_access '[MY_AWS_KEY]'; set $aws_secret '[MY_AWS_SECRET]'; set $url_full "$1"; set_by_lua $now "return ngx.cookie_time(ngx.time())"; set $string_to_sign "$request_method\n\n\n\nx-amz-date:${now}\n/$bucket/$url_full"; set_hmac_sha1 $aws_signature $aws_secret $string_to_sign; set_encode_base64 $aws_signature $aws_signature; resolver 172.31.0.2 valid=300s; resolver_timeout 10s; proxy_http_version 1.1; proxy_set_header Host $bucket.s3.amazonaws.com; proxy_set_header x-amz-date $now; proxy_set_header Authorization "AWS $aws_access:$aws_signature"; proxy_buffering off; proxy_intercept_errors on; rewrite .* /$url_full break; proxy_pass http://s3.amazonaws.com; } auth_basic "Restricted"; auth_basic_user_file /etc/nginx/.htpasswd; 

}

如果我尝试访问我的网站,这是结果

 <ListBucketResult> <Name>[MY_BUCKET]</Name> <Prefix /> <Marker /> <MaxKeys>1000</MaxKeys> <IsTruncated>false</IsTruncated> <Contents> <Key>index.html</Key> <LastModified>[LAST_MODIFIED]</LastModified> <ETag>[ETAG]</ETag> <Size>22</Size> <Owner> <ID>[OWNER_ID] </ID> <DisplayName>[NAME]</DisplayName> </Owner> <StorageClass>STANDARD</StorageClass> </Contents> </ListBucketResult> 

**编辑:** index.html确实将内容types设置为text / html。

可能我在Nginxconfiguration中丢失了一些东西。

所有工作正常,如果我把整个桶设置为公开的,如果我使用“简单”的代理方法。

你很可能已经解决了这个问题,但你可以尝试添加proxy_hide_header Content-Type; 在你的location指令