拒绝对外部node.js套接字的网络访问

拒绝对外部node.js套接字的网络访问,node.js,sockets,amazon-web-services,amazon-ec2,socket.io,Node.js,Sockets,Amazon Web Services,Amazon Ec2,Socket.io,我有两台服务器在Amazon的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

我有两台服务器在Amazon的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);
});
我尝试过各种方法,或多或少完全开放入境口岸,但都没有用。人们访问LAMP服务器的客户端脚本的唯一方法是通过负载平衡器,这可能毫无价值——您不能直接访问LAMP服务器。负载平衡器入站规则如下所示:

Custom TCP Rule -- TCP -- 8080 -- 0.0.0.0/0 (Anywhere)
HTTP            -- TCP -- 80   -- My IP
HTTPS           -- TCP -- 443  -- My IP
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, ...)

有人知道我为什么会遇到拒绝访问错误吗?节点服务器不在负载平衡器后面-实际上它完全位于进程外部。所有安全组都不受出站规则的限制。

结果表明,原因是找不到全局安装的express或socket.io模块。执行cd/var/www/html,然后执行sudo npm link socket.io sudo npm link express解决了问题。

结果表明,原因是找不到全局安装的express或socket.io模块。使用cd/var/www/html,然后使用sudo npm link socket.io sudo npm link express解决了此问题。您可以删除您的问题,也可以编写自己问题的答案。你应该做两件事中的一件,这样问题就可以解决了。