【问题标题】:How to redirect URL at AWS CloudFront?如何在 AWS CloudFront 重定向 URL?
【发布时间】:2023-03-10 02:55:02
【问题描述】:

我有一个通过 AWS CloudFront 和 S3 提供图像的客户网站。图片为 PNG 格式,网页上的 URL 属于 CloudFront 域,而不是自定义域。为了降低成本,我们计划将它们压缩成JPG格式。但是,我们发现图像 URL 在数据库中是硬编码的。

问题是当我们将图像压缩为 JPG 时,文件扩展名会发生变化,因此旧 URL 将无法正常工作。客户现在不想更改数据库。

有没有一种方法可以为来自网页的相同请求提供压缩文件(具有不同的扩展名)?

我正在寻找使用 Lambda Edge 路由请求的解决方案 - https://aws.amazon.com/blogs/networking-and-content-delivery/dynamically-route-viewer-requests-to-any-origin-using-lambdaedge/

您是否可以建议任何其他最佳解决方案? CloudFront 有没有办法在 S3 中检查两种类型的文件(jpg 和 png)并提供其中一种?示例:请求 images/car.png --> CloudFront 检查 images/car.png 和 images/car.jpg。如果 jpg 存在,则提供这个。

【问题讨论】:

    标签: amazon-web-services amazon-s3 aws-lambda amazon-cloudfront


    【解决方案1】:

    根据您的建议,您需要使用 Lambda@Edge 来修改请求。

    您需要为 Origin Request 事件部署它,然后再将其转发到 Origin。

    要进行更改,您将更新 request['uri'] 值以使用源 URL,而不是用户转发的 URL。

    关于压缩,如果您启用该选项,请记住 CloudFront 支持 automatic gzip compression

    【讨论】:

    • 感谢您的回复。我看到这对于第一次请求是如何工作的,但是一旦文件被带回并存储在 CloudFront 缓存中,由于 url 不同,CloudFront 下次将如何获取该文件?这是否意味着每个请求都会触发 lambda?
    • CloudFront 将根据缓存行为缓存请求。因此,如果您有文件名,加上某些标头,它将作为正文内容缓存在 CloudFront 中,它会从所有这些中生成一个缓存键。 Lambda@Edge 函数将为所有未缓存的请求触发。
    猜你喜欢
    • 2018-06-27
    • 2021-06-24
    • 2020-06-21
    • 2020-11-18
    • 2017-10-17
    • 2016-12-08
    • 2023-03-29
    • 2015-02-27
    • 2020-09-21
    相关资源
    最近更新 更多