我知道如果 S3 位于存储桶的根目录中,它可以提供一个简单的 index.html 文件,但我的需求是提供大量简单的静态网站,而 S3 每个帐户的存储桶限制为 100 个,所以我必须使用 nginx 和一些子目录(例如http://foo.bar.com/test/index.html,存储桶始终是 foo.bar.com,我使用指向 foo.bar.com.s3.amazonaws.com 的 CNAME 将其映射到域 bar.com 上。
这些静态站点应该可以从 subdomain.bar.com 访问并直接提供 index.html 文件。
这是我的 nginx 配置:
server {
listen 80; ## listen for ipv4
listen [::]:80 default ipv6only=on; ## listen for ipv6
server_name *.bar.com;
set $subdomain "";
if ($host ~* "^(.+)\.bar\.com$") {
set $subdomain $1;
rewrite ^(.*)$ /$subdomain/index.html last;
break;
}
location / {
proxy_pass http://foo.bar.com/;
}
}
我快到了 :) 现在发生的事情是 index.html 文件已下载:我用 curl 检查过,内容类型是 octet/strem。我尝试将标头覆盖为 text/html 并成功了,但我一直在下载文件。
我认为我的错误是对 index.html 进行硬编码,我给出的索引指令完全是多余的,我无法使其工作。
我希望 nginx 接收 test.bar.com,并提供(而不是下载)位于http://foo.bar.com.s3.amazonaws.com/test/index.html
有人能帮我吗?
短暂性脑缺血发作
答案1
检查 curl -- 什么样的回复来自http://foo.bar.com/?
Content-type: text/html
将文件放入 S3 时传递正确。
s3put -t text/html ....
成功了