使用 nginx 从 S3 提供静态网站服务

使用 nginx 从 S3 提供静态网站服务

我知道如果 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 ....成功了

相关内容