2013-10-12 117 views
9

我試圖使用和的NodeJS到socket.io提供一個Web應用程序,它使用的WebSocket在端口3000開放3000端口EC2的Amazon Web Services

我已經在我的EC2實例在我的管理控制檯通過打開3000端口將入站TCP規則添加到相關安全組,但我仍然無法通過瀏覽器上的公共dns訪問它。

sudo netstat -tulpn不顯示爲開放端口。

我錯過了什麼?是否有一些服務需要重新啓動或我需要推動它來運行命令行?

謝謝

+0

這是否得到解決? 我看了整個互聯網無濟於事。 我結束了在我的nodejs應用程序中使用端口8080而不是3000,這解決了我的問題。但爲什麼世界上沒有3000端口不工作? – tbogatchev

回答

1

我想你已經使用AWS管理控制檯進行了更改。 但這只是意味着亞馬遜的系統將允許通過他們自己的安全系統在端口3000上的消息到您的服務器。

您的EC2服務器(您不會說是Windows還是Linux)可能有自己的防火牆系統,您必須打開端口3000。您必須查看服務器的文檔,瞭解需要更改的設置。

我假設你已經嘗試在你的EC2實例上打開一個瀏覽器,你可以從那裏訪問webapp。

另外,從側面思考,如果您的EC2服務器上沒有運行其他Web服務器,爲什麼不更改node.js webapp以使用端口80?

9

sudo netstat -tulpn不顯示爲開放端口。

netstat命令將顯示「some」進程正在監聽的所有端口。因此,在爲你所提到的這種情況下,好像你的應用程序沒有偵聽端口3000

首先,解決您的應用程序,並確保它正在偵聽端口3000

此外,netstat無關從防火牆的角度來看端口是否打開/關閉。它會通過某個過程告訴您給定的端口是否處於LISTENING模式。

遵循以下步驟:

  1. 確保您的應用程序在3000端口監聽: netstat -anp | grep 3000telnet 127.0.0.1 3000
  2. 然後確保本地防火牆被配置爲允許傳入訪問端口3000 或禁用本地防火牆進行快速測試(service iptables stop)。對於linux,其通常爲iptables
  3. 允許對AWS安全組中的端口3000進行傳入訪問。

請按照上述3點,讓我們知道如果你仍然面臨同樣的問題。

1

有類似的問題,但我是用socketio與SSL

var https = require('https').Server({ 
    key: fs.readFileSync(path.join(__dirname + '../) + 'ssl.key', 'utf8'), 
    cert: fs.readFileSync(path.join(__dirname + '../') + 'ssl.crt', 'utf8') 
}, app); 

鍵是錯誤,所以即使我的AWS安全做,iptables的清晰,並與客戶端的js文件提供nginx的,在請求保持關閉。所以在Firefox中我得到了net :: ERR_CONNECTION_CLOSED,最後發現它可能是SSL失敗。

+0

爲我解決了這個問題。 – david

0

除了以上所有步驟,檢查是否有UFW(簡單的防火牆)成立。

來檢查,如果你有UFW運行做:

sudo ufw status 

如果它正在運行, 允許端口3000根本就命令

sudo ufw allow 3000 

這解決了這個問題對我來說。我忘了我已經安裝ufw了一陣子,最近又開始使用我的aws實例。