【发布时间】:2017-07-03 12:24:24
【问题描述】:
如果用户登录到我的网络应用程序(设置了名为“令牌”的 cookie),我希望请求 www.myapp.com 从我的 s3 存储桶中为网络应用程序提供 index.html。
如果用户未登录,我希望提供来自我的营销网站 s3 存储桶的 index.html。
这在 Cloudfront 中可行吗?
【问题讨论】:
标签: amazon-web-services amazon-cloudfront
如果用户登录到我的网络应用程序(设置了名为“令牌”的 cookie),我希望请求 www.myapp.com 从我的 s3 存储桶中为网络应用程序提供 index.html。
如果用户未登录,我希望提供来自我的营销网站 s3 存储桶的 index.html。
这在 Cloudfront 中可行吗?
【问题讨论】:
标签: amazon-web-services amazon-cloudfront
我认为这可以通过新的Lambda@Edge CloudFront 功能来完成。我还没有真正使用过这个功能,但这是我所知道的唯一一个允许在 CloudFront 中进行您所询问的那种路由的功能。
looks like 您可以从 Lambda@Edge 函数中检查 HTTP 标头,cookie 将作为 HTTP 标头发送。 cookie 标头未列在 restricted headers section 中,因此它应该暴露给 Lambda 函数。我认为这将能够完全按照您的意愿行事。
如果你尝试这个,请告诉我它的效果如何。
【讨论】:
Host: 标头是只读的,因此内容需要位于同一个存储桶中。通过在这个 cookie 上转发和缓存(在 / 的缓存行为中)并在 Origin Request 触发器中重写 URI,这是可以实现的,但它会以降低该页面的命中率为代价,对于拥有 cookie 的用户。但是,即使它是应用服务器(不是 S3)来源,您也会遇到同样的问题。在 L@E 不再预览之前,它只能与每个 AWS 账户的一个分配相关联。