【问题标题】:Redirect rules in S3 and cloudfrontS3 和云端的重定向规则
【发布时间】:2021-09-30 01:27:44
【问题描述】:

如果请求的文件不存在,我创建了一个存储桶来托管静态站点和重定向规则以重定向到 lambda 函数

    {
        "Condition": {
            "HttpErrorCodeReturnedEquals": "404"
        },
        "Redirect": {
            "HostName": "xxx.execute-api.us-west-1.amazonaws.com",
            "HttpRedirectCode": "307",
            "Protocol": "https",
            "ReplaceKeyPrefixWith": "write?file="
        }
    }
]

测试这台 S3 可以按预期工作。如果文件不存在,它会显示重定向到我的 lambda 函数的文件。但是当我将 cloudfront 放在 S3 存储桶前面时,当我点击不存在的同一个文件时,我没有得到重定向,但我得到 AccessDenied 错误(不确定这是来自 s3 还是来自 cloudfront ) 任何想法如何让 cloudfront 遵守 S3 规则?

谢谢!

【问题讨论】:

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


    【解决方案1】:

    通常,如果您使用 CloudFront 进行分发,您不希望为静态网站配置 S3 存储桶,因为访问存储桶的是 CloudFront,而不是最终用户。

    您可能想要使用 CloudFront 的私有 S3 存储桶,并使用 CloudFront 的边缘 trigger functions 处理不存在的文件/路径。

    This AWS article 讨论了一些选项。我建议使用“REST API”选项中的任何一个。

    【讨论】:

    • 有道理。我将存储桶设为私有,并为云端创建了访问它的规则。然后我使用 lambda 函数(api 网关)创建了一个新的原点我假设 cloudfront 首先尝试从 SE 获取 gt 文件,然后它服务于第二个原点返回的任何内容,对吗?因为我仍然收到拒绝访问错误。
    • 其实我不需要一个新的来源我可以使用相同的来源并为来源响应触发器分配一个 lambda(不是 api 网关对吗?)
    • 我不是指使用 Lambda 作为来源,我说的是使用 Lambda@Edge 作为Origin Response 触发器(请参阅我的答案中包含的链接)。基本上,它是一个每当从源(在本例中为 S3)返回响应时运行的 Lambda。您将检查来自 S3 的响应,如果是 404,请将它们定向到其他地方。 More documentation.
    • 是的,我发送了第二条消息。我厌倦了按照您的建议进行操作,但我得到“对于查看器事件,您的 Lambda 函数的最大压缩大小不能超过 1 MB。您的函数的执行角色必须由 edgelambda.amazonaws.com 服务主体承担。我的函数大于 1mb: (
    • 你有一个函数只是重定向到一个新文件,而且它 > 1 MB?这里似乎存在更大的设计问题。
    猜你喜欢
    • 2020-08-07
    • 2014-07-22
    • 2016-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-16
    • 2015-08-26
    • 2020-11-18
    相关资源
    最近更新 更多