【问题标题】:AWS EC2 client/server can't communicate via Node HTTP serverAWS EC2 客户端/服务器无法通过 Node HTTP 服务器进行通信
【发布时间】:2017-07-21 07:37:46
【问题描述】:

我有两个 AWS EC2 实例。一个服务器和一个客户端 Node JS 应用程序。

在本地,我的代码运行良好。 但是在 AWS,客户端会在一段时间后(例如 30 秒)简单地关闭,而没有任何警告/异常(由于某种原因,它无法找到并连接到服务器)

两个 AWS 实例都在运行:Windows Server 2016 Base。

两个 AWS 实例都有自己的锯齿状“AWS 安全组”。只是为了确保我没有阻止两个安全组当前允许的任何事情: “到任何 IP 的所有流量” - 传入和传出流量。

两个实例都在 AWS 的同一个“可用区”中运行。

服务器正在监听主机:'0.0.0.0',端口:4080。 并且客户端尝试在端口 4080 连接到服务器的 IP。我尝试连接到所有可能的选项 - 例如:

  1. 公共 DNS (IPv4)
  2. IPv4 公共 IP
  3. 弹性 IP
  4. 私有 IP

我什至无法从客户端或我自己的 PC 上 ping 服务器的 IP。我可以通过 RDP 访问两个 AWS 实例。

这是我的一些代码:

SERVER.JS

var server = require('http').createServer();
var WebSocketServer = require('ws').Server;

var wss = new WebSocketServer({ server: server });

server.on('request', app);
server.listen(_port, '0.0.0.0', function () { console.log('SERVER STARTED! (listening on port # ' + _port + ')') });

CLIENT.JS

var WebSocket = require('ws');
var _ws = new WebSocket(THE_SERVER_IP);

_ws.on('open', function open() {

            ...
        });

        _ws.on('message', function (data, flags) {

            ...
        });

        _ws.on('close', function close() {
            ...
        });

【问题讨论】:

  • 您确定允许所有 TCP 流量进出吗?所有端口?
  • 是的,所有端口、所有协议、任何 IP - 在两个安全组上
  • 您在 Linux 上运行吗? serverfault.com/questions/301903/…
  • 对不起,我忘了说!否 - 两个 AWS 实例都在运行 Windows Server 2016 Base。
  • 我刚刚意识到 - 当我为客户端和服务器禁用 Windows 防火墙时 - 一切正常!为什么我需要同时设置 Windows 防火墙规则和 AWS“安全组”规则?我想它需要在防火墙中创建与“安全组”相同的条目 - 对吧?

标签: javascript node.js amazon-web-services amazon-ec2 client-server


【解决方案1】:

解决方案:我在运行 server.js 应用程序的服务器中的 Windows 防火墙中添加了一个自定义 TCP 规则 - 它允许客户端的 IP 连接到端口 4080。完成。

【讨论】:

    猜你喜欢
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 2014-04-11
    • 1970-01-01
    • 1970-01-01
    • 2012-04-21
    • 2021-07-29
    • 2023-03-08
    相关资源
    最近更新 更多