两个公共子网无法与私有IP通信

时间:2019-06-05 07:02:06

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

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

  1. 反应(公共子网1)
  2. 节点(公共子网2)

在React端,有一个代码是在fetch的帮助下调用Node API的。

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

我检查curl命令,即

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

我不明白为什么私有Ip无法在React的API调用上起作用。我的curl命令工作正常。它返回公共IP和专用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

1 个答案:

答案 0 :(得分:2)

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

Network example

这是一个示例配置

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

  server_name example.com;

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

有关Nginx反向代理的更多信息:Link

注意:您还可以使用NodeJ创建反向代理。