我目前在 AWS 上部署了一个 lambda 函数。Lambda 的 URL 是https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/stage_name_here.
我在我的 DNS 中创建了一个 CNAME 条目,它指向
my.custom.name.comLambda: 的基础https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/。我不拥有该域名name.com。这纯粹是一个 CNAME 引用,我的 DNS 将解析为 lambda 基础。如果我继续运行nslookup,my.custom.name.com它会正确解析并指向https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/
我可以在调用时通过 Postman 正确使用 lambda https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/stage_name_here,但是如果我尝试使用 的任何变体my.custom.name.com/stage_name_here,它会返回
{
'message': 'forbidden'
}
我的理解是,当我尝试使用该 CNAME 发出请求时,它首先会转到我的 DNS。我的 DNS 将该 CNAME 解析为 lambda 基地址。我的理解是 AWS 不会知道,my.custom.name.com因为我的 DNS 只使用它来知道在哪里发送请求。
我理解的一个类比是我试图向一个地址发送一封信:address1. 我没有在信上写 address1,而是写address2. 当邮递员收到我的信时,他问他的老板在哪里address2,他的老板告诉他address2 = address1。然后他把信送到address1。
在那个类比中,address2并不需要实际存在才能发生该交易。除非我误解,AWS API Gateway 需要address2存在,因为字母先到address2然后再到address1.
似乎正在发生的事情是,AWS 不知何故知道这address2是等式的一部分,因为它在address2使用时拒绝请求而不是address1.
这种情况有什么区别,我如何设置 DNS CNAME 和 AWS 以使情况 1 发生?