2012-01-30 134 views
4

我對這個問題處處尋找答案,但一直沒有任何運氣。無法從外部訪問node.js

我在我的服務器上安裝了node.js。我創建像標準的「Hello World」的例子:

var http = require('http'); 

http.createServer(function (request, response) { 
    response.writeHead(200, {'Content-Type': 'text/plain'}); 
    response.end('Hello World\n'); 
}).listen(8080, "0.0.0.0"); 

console.log('Server running at http://0.0.0.0:8080/'); 

在服務器上運行該腳本後:

node app.js 

我可以連接內部端口808,並看到Hello World消息,但是當我嘗試從外部連接到端口8080我的服務器,我得到一個「無法連接到服務器」的錯誤。我也試過這個在我的聽功能:

etc.. 
}).listen(8080, "204.xxx.xxx.xxx"); 

(與我的真實外部IP地址),並沒有任何運氣。

我試圖通過增加這iptables來接受8080連接:

iptables -A INPUT -p tcp --dport 8080 -j ACCEPT 

,但仍然有碰了壁。當我運行netstat我得到:

tcp  0  0 0.0.0.0:8080   0.0.0.0:*    LISTEN  -    
tcp  0  0 0.0.0.0:80    0.0.0.0:*    LISTEN  -    
tcp  0  0 0.0.0.0:25    0.0.0.0:*    LISTEN  -    
tcp  0  0 0.0.0.0:443    0.0.0.0:*    LISTEN  -    
tcp  0  0 127.0.0.1:3306   0.0.0.0:*    LISTEN  -    

我認爲告訴我,8080端口偵聽連接。

那麼 - 我在這裏做錯了什麼?

+0

操作系統防火牆軟件怎麼樣? – 2012-01-30 03:15:55

回答

3

你最有可能落後網絡地址轉換(NAT)。

如果您使用的是普通家庭的互聯網連接和你有一個網關路由器,你可以使用你家的網絡連接(通過以太網或WiFi已連接),無有多個設備?

但是你只有一個IP地址。

要做到這一點,路由器可以連接 - 但不會讓回(簡化的相關性 - 讀,如果你想了解更多信息)從外部發起的任何連接。

你要來看看配置端口轉發 - 你想外部端口8080轉發到您的計算機的內部 IP地址。

+0

這實際上是在Slicehost上託管的。 – tptcat 2012-01-30 02:48:04

+0

@tptcat則端口應該是開放的,我不知道該說些什麼 - 你嘗試過使用'nmap'診斷連接問題? – Borealid 2012-01-30 02:49:20

+0

我得到它的工作。我意識到,無論我用什麼來將端口8080添加到iptables中,實際上並沒有採取(我假設),因爲我有一個實際的iptables文件用於規則。 一旦我添加的端口8080,我的iptables文件中的所有良好。 – tptcat 2012-02-02 17:17:27