当前位置: 首页 > 知识库问答 >
问题:

当使用CloudFront域作为lambda@edge的自定义原点时,如何停止域重定向?

蒋俊人
2023-03-14

我的根域是example.com,它应该使用example01.cloudfront.net,而example.com/pathxx/应该使用example02.cloudfront.net。这两个CloudFront发行版链接到两个带有静态站点的s3 bucket。

我已经将example.com映射到另一个CloudFront发行版。下面是我在Cloudfront发行版的origin-request触发器的lambda@edge上使用的代码。

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

    let domain = "";
    if (request.uri.match(/\/pathxx\//)) {
      domain = "example01.cloudfront.net";
      request.uri = request.uri.replace(/\/pathxx\//,"/");
    } else {
      domain = "example02.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。

...
    if (request.uri.match(/\/pathxx\//)) {
      domain = "example01.s3.amazonaws.com";
      request.uri = request.uri.replace(/\/pathxx\//,"/");
    } else {
      domain = "example02.s3.amazonaws.com";
    }
...

这是否意味着我们不能使用CloudFront分发域作为自定义源??

由于缓存问题,我必须使用CloudFront域作为自定义源,因此我不能使用s3 bucket URL。这对我的项目的体系结构和使用CloudFront域来实现预缓存也是一个限制。

共有1个答案

尤茂材
2023-03-14

我在这里找到了答案:

当CloudFront试图使用CloudFront源时,它似乎正在经历HTTP到HTTPS的重定向,结果我的域在浏览器上发生了更改。

因此,我确实更改了我的两个CloudFront发行版(Eample01.CloudFront.NET和Eample02.CloudFront.NET),在Behavies选项卡上为原始版本的查看器协议策略使用“HTTP and HTTPS”选项。因此它们将不再强制重定向到HTPPS。

 类似资料:
  • 下面是我的Lambda函数。在我的Lambda的Cloudwatch日志中可见,但在我的自定义服务器请求头中不显示:(。 我希望在下的node.js路由中可见。

  • 我想把x-frame-options添加到AWS CloudFront服务中,作为在S3桶上为我的应用程序提供服务的原点。 我不想添加新的Lambda函数来编辑请求头。 其实我在附文件下面找到了一个地方: 我如何在没有Lambda函数的情况下直接使用现有的AWS CloudFront面板来添加头?

  • 问题内容: 如何将* .appspot.com域重定向到自定义域。我想要的是这样重定向域: 注意:我正在使用go and gorilla mux。 问题答案: 您可以按照此处所述的方法进行组合,以重用代码。 在您的情况下,组合器将如下所示(根据您的口味和要求进行调整): 您可以使用以下方法包装处理程序:

  • 我一直在尝试使用 Openshift Online v3 来托管一个 Web 应用程序。它适用于红帽提供的域,但我无法让路由工作以使其在任何其他域上工作。我得到的只是: 应用程序不可用 应用程序当前未在此终结点处为请求提供服务。它可能尚未启动或仍在启动。 您看到此页面的可能原因: 有人知道如何在Openshift v3中创建自定义域吗?

  • 问题内容: 我正在寻找访问指令中“父”范围的任何方式。范围,超越,要求,从上方传入变量(或范围本身)的任何组合,等等。我完全愿意向后弯腰,但我想避免某些完全不可靠或难以维护的事情。例如,我知道我现在可以通过从preLink参数中获取并对其范围进行迭代以找到概念上的“父级” 来做到这一点。 重要说明 是,该指令必须在同一父范围内可重用。因此,默认行为(作用域:false)对我不起作用。我需要为指令的

  • 更新时间:2019-06-12 10:28:29 默认域名 平台会为您生成该项目下所有服务可用的二级域名,可在顶部菜单“发布”-“域名管理”查看默认域名及自定义域名。默认域名是为了便于您调试API时使用,是http协议。如果您需要使用https协议的域名,或者将服务进行商业化使用,则需要在“域名管理”-“自定义域名”处进行自定义域名绑定及https证书的上传。 请注意,默认域名有限流策略。同一个默