nginx:来自 s3 的代理特殊文件模式 (css)

nginx:来自 s3 的代理特殊文件模式 (css)

我们正在使用 nginx 为 Web 应用程序提供服务。它将通过 https 传入的所有内容代理到在本地主机上监听的服务器。

现在我想要 nginx 充当代理并从 s3 提供我们的 css 文件。

因为我想根据查询文件的主机名提供不同的文件(同时始终提供相同的 html 内容),所以无法直接从 s3 提供文件

在这种情况下最佳做法是什么?

答案1

最佳做法是不要通过服务器将流量路由到 S3,这只会减慢速度。您可以使用如下 URL 结构通过 SSL 从 S3 加载资产:https://s3.amazonaws.com/example-bucket-name/example.jpg

还建议从单独的域提供静态内容,因为浏览器对给定域的并行连接数量有限。

在单独的域中提供静态内容的另一个原因是通过“无 cookie”域来提高性能。您的应用可能使用 cookie,并且浏览器在每次请求时都会为其设置一个 cookie 标头。在 S3 域上不会出现这种情况,因为它不会设置 cookie。

使用备用域名作为 CDN 很常见。人们往往不会注意到,因为 URL 不会出现在位置栏中,只会出现在源代码中。

答案2

我使用这个块让它工作了。问题是我没有使用解析器。

 location ~ \.css {
                # Important to resolve host of s3
                resolver 8.8.8.8;
                # we can only ever GET/HEAD these resources
                limit_except GET {
                        deny all;
                }

                # cookies are useless on these static, public resources
                proxy_ignore_headers set-cookie;
                proxy_hide_header set-cookie;
                proxy_set_header cookie "";

                proxy_hide_header x-amz-delete-marker;
                proxy_hide_header x-amz-id-2;
                proxy_hide_header x-amz-request-id;
                proxy_hide_header x-amz-version-id;

                # only rely on last-modified (which will never change)
                proxy_hide_header etag;

                # heavily cache results locally
                proxy_cache_valid 200 28d;
                proxy_cache_valid 403 24h;
                proxy_cache_valid 404 24h;

                # s3 replies with 403 if an object is inaccessible; essentially not found
                proxy_intercept_errors on;
                error_page 403 =404 /_error/http-404.html;

                # go get it from s3
                proxy_pass https://s3.eu-central-1.amazonaws.com/bucket-name/$host/style.css;

                # annotate response about when it was originally retrieved
                add_header x-cache '$upstream_cache_status $upstream_http_date';

                # heavily cache results downstream
                expires max;
        }

相关内容