【问题标题】:Cloudfront serve file based on cookie基于 cookie 的 Cloudfront 服务文件
【发布时间】:2017-07-03 12:24:24
【问题描述】:

如果用户登录到我的网络应用程序(设置了名为“令牌”的 cookie),我希望请求 www.myapp.com 从我的 s3 存储桶中为网络应用程序提供 index.html。

如果用户未登录,我希望提供来自我的营销网站 s3 存储桶的 index.html。

这在 Cloudfront 中可行吗?

【问题讨论】:

    标签: amazon-web-services amazon-cloudfront


    【解决方案1】:

    认为这可以通过新的Lambda@Edge CloudFront 功能来完成。我还没有真正使用过这个功能,但这是我所知道的唯一一个允许在 CloudFront 中进行您所询问的那种路由的功能。

    looks like 您可以从 Lambda@Edge 函数中检查 HTTP 标头,cookie 将作为 HTTP 标头发送。 cookie 标头未列在 restricted headers section 中,因此它应该暴露给 Lambda 函数。我认为这将能够完全按照您的意愿行事。

    如果你尝试这个,请告诉我它的效果如何。

    【讨论】:

    • 是的...您可以编辑 URI(路径),但 Host: 标头是只读的,因此内容需要位于同一个存储桶中。通过在这个 cookie 上转发和缓存(在 / 的缓存行为中)并在 Origin Request 触发器中重写 URI,这是可以实现的,但它会以降低该页面的命中率为代价,对于拥有 cookie 的用户。但是,即使它是应用服务器(不是 S3)来源,您也会遇到同样的问题。在 L@E 不再预览之前,它只能与每个 AWS 账户的一个分配相关联。
    • 如果您想在这种情况下实际返回 30X 重定向,而不是返回替代内容,您需要使用 Origin Request 触发器将 URI 实际重写为目标存储桶中的虚拟页面使用重定向规则来实际生成重定向,因为 L@E 无法更改 HTTP 状态代码,并且请求标头当然不可用于响应触发器。而且触发器不能改变实际的响应体。
    • @Michael-sqlbot 感谢您的澄清。听起来您实际上有机会使用 L@E 并对其进行了详细研究。我想知道 OP 的 S3 存储桶和他的网站是否都被配置为 CloudFront 分配的来源,如果这样可以更轻松地完成他想要的事情。
    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 2017-07-18
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 2016-11-10
    • 1970-01-01
    相关资源
    最近更新 更多