我目前在AWS上部署了lambda函数。 Lambda的URL为https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/stage_name_here
。
我在DNS中创建了一个CNAME条目,该条目指向
my.custom.name.com
到Lambda的底部: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/
我可以在调用https://xxxxxxxxxx.execute-api.us-east-1.amazonaws.com/stage_name_here
时通过Postman正确使用lambda,但是如果我尝试使用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
。然后,他将这封信投递到地址1。
以此类推,address2
不需要实际存在就可以进行此事务。除非我误会,否则AWS API Gateway要求存在address2
,因为字母首先到达address2
,然后到address1
。
似乎正在发生的事情是,AWS以某种方式知道address2
是等式的一部分,因为它在使用address2
而不是address1
时拒绝了请求。
在这种情况下有什么区别?如何设置DNS CNAME和AWS来使情况1发生?
答案 0 :(得分:0)
AWS API网关控制台具有称为custom domains
的内置机制。正是您所需要的。您需要按照@LostJon指出的进行设置。
基本步骤是:
api.example.com
创建自定义域,在此步骤中,选择通过步骤1获得的域的SSL证书basepath
,将basepath
指向您的API。例如,基本路径/payment
指向您的api,从而可以通过https://api.example.com/payment
访问它
此过程还将为您提供d3fgrtgh@cloudfront.net的Cloudfront分发地址。A
记录,以将子域api.example.com
指向云的分发地址,例如d3fgrtgh @ cloudfront.net` 参考: https://hackernoon.com/how-to-setup-subdomain-for-aws-api-gateway-d526a9fd6722