首页 > 解决方案 > 到云端的 nginx 路由(到 S3)

问题描述

我正在尝试通过 Cloudfront(和 S3)服务器静态站点。我my-bucket使用静态网站托管启用了 S3 存储桶。NGINX 根据路径路由流量。location /, /beta/,/static/app/去云端,所以我创建了Origins Domain Name 和 Path & Origins ID for

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-我的桶

并将行为映射到
/beta -> S3-my-bucket/beta
/admin -> S3-my-bucket/admin
默认 (*) -> S3-my-bucket

我有以下 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==

proxy_pass http://my-bucket.s3-website-us-west-2.amazonaws.com但是如果我像这样将 Nginx 配置指向我的存储桶 url

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 工作?

标签: nginxnginx-locationnginx-configamazon-cloudfront

解决方案


推荐阅读