首页 > 解决方案 > 两个公共子网无法与私有 ip 通信

问题描述

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

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

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

当我将 Nodejs 的公共 IP 传递到通信的 url 时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 的响应。

任何帮助都非常感谢。

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

标签: node.jsreactjsamazon-web-servicesamazon-ec2

解决方案


即使您在同一个 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 反向代理:链接

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


推荐阅读