nginx至云峰的路线(至S3)

nginx至云峰的路线(至S3),nginx,nginx-location,nginx-config,amazon-cloudfront,Nginx,Nginx Location,Nginx Config,Amazon Cloudfront,我试图通过Cloudfront(和S3)为静态站点提供服务器。我的S3 bucketmy bucket已启用静态网站托管。NGINX根据路径路由流量。位置/,/beta/,/static/app/转到cloudfront,因此我为 my-bucket.s3.amazonaws.com/beta=s3 my-bucket/beta my-bucket.s3.amazonaws.com/admin=s3 my-bucket/admin my-bucket.s3.amazonaws.com=s3 my

我试图通过Cloudfront(和S3)为静态站点提供服务器。我的S3 bucket
my bucket
已启用静态网站托管。NGINX根据路径路由流量。位置
/
/beta/
/static/app/
转到cloudfront,因此我为

my-bucket.s3.amazonaws.com/beta=s3 my-bucket/beta
my-bucket.s3.amazonaws.com/admin=s3 my-bucket/admin
my-bucket.s3.amazonaws.com=s3 my-bucket

并将行为映射到
/beta->S3我的桶/beta
/管理->S3我的桶/管理
默认(*)->S3我的存储桶

我有以下Nginx配置

server {
    listen         80 default_server;
    server_name    localhost;
    keepalive_timeout 70;
    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/x-javascript application/javascript text/xml application/xml application/xml+rss text/javascript;

    location / {
         proxy_pass http://XXXXXX.cloudfront.net;
         proxy_set_header Host $host;
    }

    location /beta/ {
        proxy_pass http://XXXXXX.cloudfront.net/beta/;
    }

    location /static/app/ {
        rewrite ^/static/app/(.*)$ /$1 break;
        proxy_pass http://XXXXXX.cloudfront.net;
    }
}
当我试图打开指向这个Nginx的URL时,我得到

403 ERROR
The request could not be satisfied.
Bad request. 
Generated by cloudfront (CloudFront)
Request ID: 3yYfFbg1ObQ4B-3oco1HYWK46CWh7E8XZOBVl_sdQ6rKMZ4JYZ_KeQ==
但是如果我将Nginx config指向我的bucket url
proxy\u passhttp://my-bucket.s3-website-us-west-2.amazonaws.com
像这样

server {
    listen         80 default_server;
    server_name    localhost;
    keepalive_timeout 70;
    gzip on;
    gzip_disable "msie6";
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_buffers 16 8k;
    gzip_http_version 1.1;
    gzip_types text/plain text/css application/json application/x-javascript application/javascript text/xml application/xml application/xml+rss text/javascript;

    location / {
         proxy_pass http://my-bucket.s3-website-us-west-2.amazonaws.com/;
    }

    location /beta/ {
        proxy_pass http://my-bucket.s3-website-us-west-2.amazonaws.com/beta/;
    }

    location /static/app/ {
        rewrite ^/static/app/(.*)$ /$1 break;
        proxy_pass http://my-bucket.s3-website-us-west-2.amazonaws.com;
    }
}
一切正常


我需要做哪些更改才能通过cloudfront工作?

删除
proxy\u set\u header Host$Host可能会修复错误,因此请确认。。。但是你的设置有一个更大的问题。。。Nginx→ 云锋→ 在这个应用程序中,S3对我来说没有意义,除非您使用CloudFront的原因是因为bucket与Nginx位于不同的AWS区域,而且即使这样,理由也很软。您这样做的原因是什么?CloudFront仅用于缓存,没有其他原因。没有
proxy\u set\u头主机$Host
main URL更改为cloudfront URL。您有
proxy\u pass http://
,但cloudfront设置为将http重定向到HTTPS。更改为
proxy\u passhttps://...
或使用查看器协议策略配置CloudFront:在每个缓存行为中使用HTTP和HTTPS。CloudFront在此设置中没有为您执行任何有意义的缓存。使用DNS→ Nginx→ 云锋→ S3,每个请求仍然通过您的Nginx服务器提供,CloudFront不会缓存浏览器附近的内容——它只是缓存Nginx服务器附近的内容,而Nginx服务器可能就在存储桶附近,因此不会获得任何好处。您可能需要的设置是DNS→ 云锋→ {Nginx或S3},其中CloudFront缓存行为匹配存储桶和Nginx服务器的路径,并选择目标。通过这种方式,CloudFront可以缓存在查看器附近,查看器总是首先与之联系可能会修复错误,因此请确认。。。但是你的设置有一个更大的问题。。。Nginx→ 云锋→ 在这个应用程序中,S3对我来说没有意义,除非您使用CloudFront的原因是因为bucket与Nginx位于不同的AWS区域,而且即使这样,理由也很软。您这样做的原因是什么?CloudFront仅用于缓存,没有其他原因。没有
proxy\u set\u头主机$Host
main URL更改为cloudfront URL。您有
proxy\u pass http://
,但cloudfront设置为将http重定向到HTTPS。更改为
proxy\u passhttps://...
或使用查看器协议策略配置CloudFront:在每个缓存行为中使用HTTP和HTTPS。CloudFront在此设置中没有为您执行任何有意义的缓存。使用DNS→ Nginx→ 云锋→ S3,每个请求仍然通过您的Nginx服务器提供,CloudFront不会缓存浏览器附近的内容——它只是缓存Nginx服务器附近的内容,而Nginx服务器可能就在存储桶附近,因此不会获得任何好处。您可能需要的设置是DNS→ 云锋→ {Nginx或S3},其中CloudFront缓存行为匹配存储桶和Nginx服务器的路径,并选择目标。通过这种方式,CloudFront可以缓存在查看器附近,而查看器总是先与它联系。