如何使用私有 IP 连接到 EC2 上的后端

Posted

技术标签:

【中文标题】如何使用私有 IP 连接到 EC2 上的后端【英文标题】:How to connect to backend on EC2 with private IP 【发布时间】:2021-08-25 14:16:41 【问题描述】:

我的前端和后端应用程序通过 AWS ECS 运行。前端 EC2 实例有一个公共 IP,因此可以通过 Internet 连接,但后端 EC2 实例只有一个私有 IP。这两个实例都位于具有不同子网(公共和私有)的同一 VPC 中。我已经验证了路由表、NAT、NACL 和安全组配置,一切都符合要求。当我的前端应用程序以私有 IP 访问后端时,它会出现连接超时,即无法连接。

我已经验证了通过 SSH 连接到公共实例并 ping 到后端实例的私有 IP,ping 没问题。我还尝试从我的前端实例 curl 到使用私有 IP 作为主机的后端 API,我得到了响应,同样的事情也从前端 docker 容器中得到验证。但是前端应用程序无法向后端 API 发出请求。

Check visual here

【问题讨论】:

您是否从前端 EC2 实例中测试 curl 到私有 API?如果这可行,但您的应用在同一实例上无法访问 API,那么您的应用正在做不同的事情。 您的前端代码是否真的在 EC2 服务器上运行?或者它是某种在浏览器中实际运行的网络应用程序? @jarmod 我已经测试了从前端 EC2 到私有 API 的 curl 并且它正在工作,如果你说应用程序有问题,那么我也尝试过放置一个空白的 html 页面和在那里调用私有 API,仍然无法正常工作 @MarkB 我的前端代码是 VueJs 中的 Web 应用程序,但它是使用 Nuxt 的服务器端呈现的 Web 应用程序。这就是为什么我将它部署在 EC2 实例而不是 S3 中的原因。 您确定从前端到后端的 API 调用 100% 发生在 UI 在服务器上呈现时,然后才显示在 Web 浏览器中?如果是这样的话,这将是一个完全静态的 web 应用程序。 【参考方案1】:

请求超时通常是由安全组问题引起的。

也许重新检查附加到私有子网中实例的 sg 是一个很好的尝试?确保允许公共实例与私有实例通信。

您可以尝试将附加到公共实例的sg添加到附加到私有实例的sg的入站规则源中。它将允许公共实例与私有实例通信,无论 IP 地址发生任何变化。

【讨论】:

我已经验证了附加到公共和私有的 SG,他们能够连接这就是为什么我能够从公共 ping 私有实例,也可以从公共实例向私有实例发出 curl 请求.

以上是关于如何使用私有 IP 连接到 EC2 上的后端的主要内容,如果未能解决你的问题,请参考以下文章

如何将面向公众的负载均衡器连接到私有 VPC 中的 EC2 实例

在android应用程序中连接到主机名而不是IP地址

如何将 S3 托管的前端连接到 Elastic beanstalk 托管的后端?

无法在 iOS 15 上将本机应用程序连接到后端

如何将aws上的ec2实例连接到我公司的***

如何从ec2实例ssh到另一个ec2实例而不将公钥存储在其中一个实例中?