【问题标题】:Two Public subnets can not communicate with private ip两个公共子网无法与私有 ip 通信
【发布时间】:2019-08-21 15:22:05
【问题描述】:

我有一个 VPC,其中有两个公共子网。

  1. React(公共子网 1)
  2. 节点(公共子网 2)

在 React 方面,有一段代码在 fetch 的帮助下调用 Node API。

当我将 Nodejs 的公共 IP 传递到 fetch 的 url 时,就会发生通信, 如果我将公共 IP 更改为节点实例私有 IP,则不会发生通信。

我检查 curl 命令,即

curl http://NodeInstance public_ip:port/ -> return Response
curl http://NodeInstance private_ip:port/ -> return Response.

我不明白为什么私有 IP 不适用于来自 React 的 API 调用。我的 curl 命令工作正常。它返回来自公共和私有 IP 的响应。

非常感谢任何帮助。

I am using Single security group for both the instance i.e

Type     |     protocol     |     port range     |     source
All TCP        TCP                0-65535              0.0.0.0/0
SSH            TCP                22                   0.0.0.0/0
All ICMP-IPV$  All                N/A                  0.0.0.0/0

【问题讨论】:

  • 您的反应代码正在客户端的浏览器上运行,因此除非该浏览器碰巧有到您的 VPC 私有地址空间的路由,否则它将无法连接到私有 IP。
  • @ydaetskcoR 非常感谢您的回复。你能分享我如何实现这一目标。我的意思是每次使用公共 ip 调用后端服务器是不安全的
  • 我在 VPC 上都有公共子网,并连接了 Internet 网关
  • 为什么不安全? React 代码在您的用户浏览器中运行,如果它需要与另一台服务器通信,则需要通过公共 IP 地址进行。
  • 但是为什么它需要公共 IP 如果它们都在同一个 VPC 中。例如,如果我们在家,那么我们的父母会用我们的昵称而不是正式名称来称呼我们。如果使用私有 IP 而不是公共 IP 进行通信,我们也将节省资金

标签: node.js reactjs amazon-web-services amazon-ec2


【解决方案1】:

即使您在同一个 VPC 中运行 React 代码和 NodeJs 代码,当您运行程序时,React 代码也会被推送到浏览器。因此,当最终用户尝试使用该应用程序并开始通过私有 IP 从您的 VPC 外部的浏览器调用后端 API 时,该调用将不会到达节点服务器。一种解决方案是使用 Nginx 之类的东西创建反向代理。 Nginx 将位于 VPC(公共子网 1)内并处理浏览器和后端 API 之间的通信。

这是一个示例配置

server {
  listen 80;
  listen [::]:80;

  server_name example.com;

  location /api/getitems {
      proxy_pass https://yourprivatip/api/getitems;
  }
}

更多关于 Nginx 反向代理:Link

注意:您也可以使用 NodeJs 创建反向代理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-09
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多