我正在 AWS 中构建我的应用程序。
我已经将 Reactjs 前端项目部署在 EC2 实例中。我希望将其置于 AWS API 网关后面,而不是让来自外部互联网世界的用户直接访问我的 EC2 实例。因此,AWS API 网关将成为我应用程序前端和后端服务的唯一入口点。以下是计划:
外部世界 ---> AWS API 网关 ---> 网络负载均衡器 ---> 我的 VPC 目标组 / EC2 实例
以下是我所做的:
Reactjs Frontend 项目在 EC2 实例上运行良好;我可以使用 EC2 实例的公共 IP 地址访问网页。
配置良好的目标组和网络负载均衡器。我通过在浏览器中输入 NLB 的 DNS 名称(即)进行确认
http://myapp-frontend-NLB-c11112esd43524rw.elb.ap-northeast-1.amazonaws.com
,它成功加载/打开了我的应用程序的前端网页。我已经创建了新的 AWS API 网关(REST API)并为其配置了自定义域名。(使用 AWS 证书管理器处理 https 证书)。
即自定义域名为
frontend.myapp.com
;API 网关域名为d-123sdf1234asd.execute-api.ap-northeast-1.amazonaws.com
我已经
NS
在我的 DNS 提供商中为他们创建了新记录,因此frontend.myapp.com
指向d-123sdf1234asd.execute-api.ap-northeast-1.amazonaws.com
我已经关注过这个 aws 文档:https://docs.aws.amazon.com/apigateway/latest/developerguide/getting-started-with-private-integration.html一步步配置VPC链接,API资源,集成类型等。
部署创建的API后,点击打开Invoke URL( 形式https://123qwe123qe.execute-api.ap-northeast-1.amazonaws.com/[stage]
)可以看到返回的HTML代码。
我预期当我frontend.myapp.com
在浏览器里访问时,DNS最终会把流量导向API Gateway的域名d-123sdf1234asd.execute-api.ap-northeast-1.amazonaws.com
,然后API Gateway会把请求传递给NLB等等,最终加载网页/或者返回相同的HTML代码。
但是我frontend.myapp.com
在浏览器中访问时没有任何反应,我以为是DNS记录没有起作用,dig +trace docloud.iwg-inc.co.jp.
结果如下:
; <<>> DiG 9.10.6 <<>> +trace frontend.myapp.com.
;; global options: +cmd
. 3240 IN NS i.root-servers.net.
. 3240 IN NS d.root-servers.net.
. 3240 IN NS b.root-servers.net.
. 3240 IN NS m.root-servers.net.
. 3240 IN NS j.root-servers.net.
. 3240 IN NS h.root-servers.net.
. 3240 IN NS f.root-servers.net.
. 3240 IN NS g.root-servers.net.
. 3240 IN NS k.root-servers.net.
. 3240 IN NS c.root-servers.net.
. 3240 IN NS a.root-servers.net.
. 3240 IN NS l.root-servers.net.
. 3240 IN NS e.root-servers.net.
;; Received 811 bytes from 240d:1a:6a5:c900:e67e:66ff:fe1f:bf4c#53(240d:1a:6a5:c900:e67e:66ff:fe1f:bf4c) in 29 ms
...other results...
frontend.myapp.com. 14400 IN NS d-123sdf1234asd.execute-api.ap-northeast-1.amazonaws.com.
;; Received 117 bytes from 54.68.111.244#53(ns4.jp-domains.jp) in 131 ms
;; connection timed out; no servers could be reached
正如你所见, frontend.myapp.com.
确实指向了d-123sdf1234asd.execute-api.ap-northeast-1.amazonaws.com.
一条NS
记录。
然而,它说connection timed out; no servers could be reached
。
d-123sdf1234asd.execute-api.ap-northeast-1.amazonaws.com.
是我的 API 网关的自定义域名,我已经使用调用 URL 对其进行了测试,并且它已连接到服务。
为什么会这么说no servers could be reached
?
这是什么意思?我该如何解决并完成流程?
答案1
frontend.myapp.com. 14400 IN NS d-123sdf1234asd.execute-api.ap-northeast-1.amazonaws.com.
该NS
记录类型适用于名称服务器。
当前记录的意思是:如果你想了解有关frontend.myapp.com
子域名或该子域名下任何记录的 DNS 相关信息,请询问运行在d-123sdf1234asd.execute-api.ap-northeast-1.amazonaws.com
而且 d-123sdf1234asd.execute-api.ap-northeast-1.amazonaws.com 根本不是名称服务器,因此不会对发送到那里的 DNS 查询做出任何响应。
这就是 connection timed out; no servers could be reached
您看到的错误。
我思考您打算设置一条 DNSCNAME
记录,基本上就是说,如果您想访问 frontend.myapp.com,请使用 d-123sdf1234asd.execute-api.ap-northeast-1.amazonaws.com 的 IP 地址。
答案2
您需要创建指向 AWS API 网关的 CNAME 记录d-123sdf1234asd.execute-api.ap-northeast-1.amazonaws.com.
,而不是 NS 记录。