gpt4 book ai didi

amazon-web-services - 使用 CloudFront 域作为 Lambda@Edge 的自定义源时如何停止域重定向?

转载 作者:行者123 更新时间:2023-12-03 20:47:49 24 4
gpt4 key购买 nike

我想根据我网站的相对路径使用不同的来源。
我的根域是 example.com 它应该与 一起提供example01.cloudfront.net
example.com/pathxx/应与 一起提供example02.cloudfront.net .
这两个 CloudFront 分配链接到两个具有静态站点的 s3 存储桶。
我已将 example.com 映射到另一个 CloudFront 分配。
以下是我在该 Cloudfront 发行版的原始请求触发器上的 Lambda@Edge 上使用的代码。

exports.handler = async (event, context, callback) => {
var request = event.Records[0].cf.request;

let domain = "";
if (request.uri.match(/\/pathxx\//)) {
domain = "example02.cloudfront.net";
request.uri = request.uri.replace(/\/pathxx\//,"/");
} else {
domain = "example01.cloudfront.net";
}

request.origin = {
custom: {
domainName: domain,
port: 80,
protocol: "http",
path: "",
sslProtocols: ["TLSv1", "TLSv1.1"],
readTimeout: 5,
keepaliveTimeout: 5,
customHeaders: {}
}
};

request.headers["host"] = [{ key: "host", value: domain }];
callback(null, request);
};
当我使用此代码并在浏览器上输入 example.com 时,它会重定向到 example01.cloudfront.net
和 example.com/pathxx 通过接收 301 状态代码重定向到 example02.cloudfront.net。
但是,如果我将 CloudFront 源更改为它们的 s3 存储桶 URL,则不会发生此重定向,并且我将始终如预期地看到我的 example.com 域,并且我不会收到任何导致重定向的 301 代码。
...
if (request.uri.match(/\/pathxx\//)) {
domain = "example02.s3.amazonaws.com";
request.uri = request.uri.replace(/\/pathxx\//,"/");
} else {
domain = "example01.s3.amazonaws.com";
}
...
这是否意味着我们不能使用 CloudFront 分配域作为自定义源??
由于缓存问题,我必须将 CloudFront 域用于自定义源,因此我无法使用 s3 存储桶 URL。这是对我的项目架构的限制,并且还使用旨在实现预缓存的 CloudFront 域。

最佳答案

可以将单个 Cloudfront 分发配置为提供来自多个来源(例如 2 个不同的 S3 存储桶)的内容。所以你可以(根本不使用 Lambda)有:
Route53

  • example.com -> CloudFront 发行版 A

  • Cloudfront(发行版 A)
  • example.com/* -> origin s3-bucket-1
  • example.com/pathx/-> origin s3-bucket-2

  • this guide演练(使用 API Gateway + S3)。

    关于amazon-web-services - 使用 CloudFront 域作为 Lambda@Edge 的自定义源时如何停止域重定向?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64788690/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com