2015-04-22 40 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解決了這個問題。