我目前在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时,我可以通过邮递员正确地使用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。然后他把信交给address1。
在这个类推中,address2不需要实际存在才能发生这个事务。除非我误解了,AWS要求address2的存在,因为这些字母首先是address2,然后是address1。
似乎正在发生的是,AWS不知何故知道address2是等式的一部分,因为当使用address2而不是address1时,它拒绝请求。
在这个场景中有什么不同,我如何设置DNS CNAME和AWS以使场景1发生?
发布于 2019-12-10 21:14:02
API网关控制台有一个名为custom domains的内置机制。这正是你所需要的。正如LostJon所指出的那样,你需要设置它。
基本步骤是:
api.example.com )创建自定义域,在此步骤中,为您的域选择通过步骤1basepath获得的SSL证书,以将basepath指向API。例如,基路径/payment指向您的api,这使它可以通过https://api.example.com/payment访问,此过程还将为您提供一个cloudfront分发地址,例如d3fgrtgh@cloudfront.net` Route53 (或域寄存器),并创建A记录,将子域api.example.com指向cloudfront分发地址e.g d3fgrtgh@cloudfront.net`
参考资料:https://hackernoon.com/how-to-setup-subdomain-for-aws-api-gateway-d526a9fd6722
https://stackoverflow.com/questions/59274369
复制相似问题