我有兩臺服務器在亞馬遜的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