AWS:如何为自定义域名配置Cloudfront

3

我的设置:

API网关 - 10个API(api1、api2等),全部映射到一个自定义域名(api.xxx.com)

Route53 - 将api.xxx.com指向我的Cloudfront分配

Cloudfront - 创建了配送,设置为CNAME的api.xxx.com

我需要知道的是 - 我想将该Cloudfront的Origin设置为这个自定义域名,以便我可以调用像api.xxx.com/api1/endpointapi.xxx.com/api2/endpoint这样的API。但是怎么做呢?我使用了我的api.xxx.com自定义域名(xxxxxxx.execute-api.us-east-1.amazonaws.com)作为默认行为Origin名称,然后认为所有10个API的请求都会正确路由,但实际上并没有发生。

可行的方案:我使用api1的Invoke Url创建了Origin名称,并将其分配给默认行为。因此,现在当我调用 "https://api.xxx.com/endpoint" 时,会调用api1。这是有意义的,但问题是 - 我需要API路径成为URL的一部分,例如"https://api.xxx.com/api1/endpoint",以便我可以区分它们。

不可行的方案:但是,我需要在分配中设置多个API,以便我可以像"https://api.xxx.com/api1/endpoint"这样调用它们。如果我使用Invoke URL作为API的Origin名称,我就不能将此API名称附加到URL中,否则会返回403错误。我希望如果我使用"自定义域名"下的"API网关域名"(毕竟,它具有xxxxx.execute-api.us-east-1.amazonaws.com的格式),我就可以在URL中使用API,但是并不起作用。我甚至不能使用这个"API网关域名"通过Postman来调用单个API。有人能告诉我该怎么做吗?如何配置Cloudfront以便调用各种API并在URL中使用它们的路由?

2个回答

1

最终找到了解决方案,更详细的描述在这个讨论线程中。我的问题是我试图直接从Cloudfront链接到自定义域名(xxxxxxxxxxxx.execute-api.us-east-1.amazonaws.com),但我应该使用“好看”的,易读的地址作为起始地址,并在Route53中进行重定向。

工作设置:

  1. 在API Gateway中创建了一个自定义域名regional-api.xxx.com,端点类型为区域性(xxxxxxxxxxxx.execute-api.us-east-1.amazonaws.com)。
  2. 在Route53中,A和AAAA记录将regional-api.xxx.com映射到区域端点目标域名。
  3. 创建Cloudfront分发,使用regional-api.xxx.com作为起始域名,api.xxx.com作为CNAME。
  4. 在Route53中,A和AAAA记录将api.xxx.com映射到新创建的CF分发的域名。

0

我的设置与你的有些不同,但似乎我们想要实现相同的目标。

我有四个S3存储桶,通过CloudFront进行服务。 一个存储桶是根网站;另外三个存储桶包含三个不同的管理面板。

对于每个S3存储桶,我创建了一个单独的源; 我认为您应该为每个单独的API创建一个源。

我为每个源组添加了两个路径模式; 我认为对于您的API,您可以每个API拥有一个模式。路径模式可能看起来像/api1/*,它指向api1的源

不确定您是否尝试为所有API添加源。


1
你好,我还没有尝试为所有API做这件事,因为现在甚至一个API都无法工作。我添加了/api1/*的模式,但由于某种原因被忽略了,唯一有效的是默认的那个。所以对“https://api.xxx.com/endpoint”的请求可以工作,但对“https://api.xxx.com/api1/endpoint”的请求却不行... - Jozef
1
这里可能是显而易见的:模式部分后面的所有内容,如/api1/*,将添加到您的源之后。因此,cloudfront.net/api1/endpoint 将变成 xxxxxxx.execute-api.us-east-1.amazonaws.com/api/endpoint。 - Max Visser
2
其实,这就是我没有意识到的——我的API的调用URL已经“包含”它了,所以当我在URL中添加另一个/api1/时,链接就变得无效了。这也是为什么只有我的默认路径有效,因为它直接针对端点,没有中间的“/api1/”。现在只需要找出如何能够调用API并将其名称用作路径的一部分,因为我需要将多个API分配给该CloudFront分发。 - Jozef
1
啊是的,这可能是你所做的和我所做的之间的一个关键区别。每个模式路径都链接到不同的源URL,而你正在尝试使用相同的源URL。 - Max Visser
1
如果你成功了,请不要忘记启用查询字符串转发,因为它不会自动转发例如?q=这样的内容,而你可能需要在一些API路由上使用它! :) - Max Visser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接