2015-04-22 58 views
0

我有两台服务器在亚马逊的EC2上运行。一个是运行LAMP的标准Web服务器(这是一个弹性负载平衡器的后面),另一个是安装了Express和socket.io的Node.js服务器。在该节点服务器上,我有我的server.js文件(该文件在服务器启动时自动加载)。网络访问被拒绝到外部node.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) 

,灯服务器的规则:

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, ...) 

任何人任何想法,为什么我会得到一个拒绝访问错误? Node服务器不在负载平衡器之后 - 它完全在进程外部。所有安全组在出站规则方面都不受限制。

+0

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

+0

你可以删除你的问题,也可以为自己的问题写一个答案。你应该做两个之一,以便问题得到解决。 – jfriend00

回答

0

原来是因为找不到全局安装的express或socket.io模块。做cd /var/www/html然后sudo npm link socket.iosudo npm link express解决了这个问题。