我有两台服务器在亚马逊的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服务器不在负载平衡器之后 - 它完全在进程外部。所有安全组在出站规则方面都不受限制。
原因是它找不到全局安装的express或socket.io模块。做'cd/var/www/html'然后'sudo npm link socket.io''sudo npm link express'解决了这个问题。 –
你可以删除你的问题,也可以为自己的问题写一个答案。你应该做两个之一,以便问题得到解决。 – jfriend00