网络访问被拒绝到外部node.js套接字

时间:2015-04-22 15:45:36

标签: node.js sockets amazon-web-services amazon-ec2 socket.io

我在亚马逊的EC2上运行了两台服务器。一个是运行LAMP的标准Web服务器(这是弹性负载平衡器的后面),另一个是安装了Express和socket.io的Node.js服务器。在该节点服务器上,我有server.js文件(此文件在服务器启动时自动加载)。

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);

server.listen(8080); 

io.on('connection', function (socket) { 
    socket.on('join', function() {
        console.log('joined');
    }
}

在LAMP服务器上,客户端通过以下方式连接到此外部服务器:

<script src="https://cdn.socket.io/socket.io-1.3.4.js"></script>

var socket = io.connect('http://URL_HERE:8080');
socket.on('connect', function() {
    socket.emit('join', room_id);
});

问题是,控制台持续吐出ERR_NETWORK_ACCESS_DENIED,表明对该端口的访问被阻止。但是,节点服务器的入站规则如下:

Custom TCP Rule -- TCP -- 8080 -- 0.0.0.0/0 (Anywhere)
HTTP            -- TCP -- 80   -- My IP
HTTPS           -- TCP -- 443  -- My IP

我已经通过或多或少地完全打开入站端口尝试了所有种类,但无济于事。人们访问客户端脚本(LAMP服务器)的唯一方法是通过负载均衡器 - 您无法直接访问LAMP服务器。负载均衡器入站规则如下:

Custom TCP Rule -- TCP -- 8080 -- 0.0.0.0/0 (Anywhere)
HTTP            -- TCP -- 80   -- 0.0.0.0/0 (Anywhere)
HTTPS           -- TCP -- 443  -- 0.0.0.0/0 (Anywhere)

LAMP服务器的规则:

Custom TCP Rule -- TCP -- 8080 -- sg-elb_id
HTTP            -- TCP -- 80   -- sg-elb_id
HTTPS           -- TCP -- 443  -- sg-elb_id
... other irrelevant rules (SHH, MYSQL, ...)

有谁知道为什么我会收到拒绝访问错误?节点服务器不在负载均衡器后面 - 它实际上完全在流程外部。所有安全组在出站规则方面都不受限制。

1 个答案:

答案 0 :(得分:0)

原因是它无法找到全局安装的express或socket.io模块。执行Riri然后cd /var/www/html sudo npm link socket.io解决了这个问题。