【问题标题】:how to implement nginx conf in aws cloudfront?如何在 aws cloudfront 中实现 nginx conf?
【发布时间】:2016-04-05 23:44:10
【问题描述】:
我有一些静态文件,由 nginx 提供。
我有直接的 nginx conf
http//xx.yy.com/style.css => /web/style/xx.css
现在我想使用 AWS Cloudfront 来处理这个静态 css/js 文件。
如何在 Cloudfront 中做到这一点?
最后,我希望能够根据子域动态地将请求定向到不同的文件或文件夹。
例如:
http//xx.yy.com/style.css => /web/style/xx.css
http//zz.yy.com/style.css => /web/style/zz.css
http//xx.yy.com/api.js => /web/api/xx.js
http//zz.yy.com/api.js => /web/api/zz.js
【问题讨论】:
标签:
amazon-web-services
nginx
amazon-cloudfront
【解决方案1】:
CloudFront 的“来源”决定主要基于两件事 - URL 和路径。
在单个 CloudFront 分配中,您可以有多个“行为”规则。每个规则都可以有自己的起源,所以你可以说:
For request path:
/foo/
Use origin:
http://foo.origin.com/
每个发行版可以有多个“备用域名”,但您不能说,在单个发行版中,“对于这个主机名,使用这个来源”,只能基于路径指定.
最后,我希望能够根据子域动态地将请求定向到不同的文件或文件夹。
http//xx.yy.com/style.css => /web/style/xx.css
http//zz.yy.com/style.css => /web/style/zz.css
尽管如此,您确实有一个选择。 CloudFront 可以配置为 whitelist headers,包括 Host 标头。白名单标头用作缓存键变体的一部分。随后,如果您配置:
- 配置 1 个 Cloudfront 分发
- 设置 2 个备用域名(xx.yy.com 和 zz.yy.com)
- 将“主机”列入白名单作为要发送到源的标头
- 在源端,使用适当的重写配置基于名称的虚拟主机(例如
if xx.yy.com/style.css, then serve xx.css)
这应该会导致您所描述的配置有效,尽管在 Nginx 层中涉及的逻辑比可取的要多。
请注意,如果您希望 xx.yy.com 和 zz.yy.com 转到同一目录的不同源(HTTP 服务器),则需要使用不同的 CloudFront 分配。此外,CloudFront 不允许您重写 URL 的文件部分(例如 /foo.css -> origin/bar.css),因此基于特定文件执行此操作会很棘手。