2017-02-13 25 views
1

我在這裏搜索了其他問題關於這個錯誤,但我找不到解決方案。「應用程序拋出一個未捕獲的異常,並終止:錯誤:偵聽EACCES 0.0.0.0:80」

昨天我部署了節點+快速+ Socket.IO網站Azure的,它不工作。我得到的錯誤

Application has thrown an uncaught exception and is terminated: Error: listen EACCES 0.0.0.0:80 

在此代碼:

// more code ... 

var app = express(); 

var server = require('http').Server(app); 

var io = require('socket.io')(server); 

// right here 
server.listen(portNumber, function() { 
    console.log('Server listening at port %d', portNumber); 
}); 

// more code ... 

看起來好像另一個進程已經在該端口上監聽..也許IIS服務器?我不確定。

+0

您是否爲應用程序設置了任何環境變量(Azure門戶中的應用程序設置)? –

回答

0

此錯誤表示您沒有權限在該端口上偵聽。如果別的東西,端口已經聽你應該得到這樣的錯誤:

Error: listen EADDRINUSE 0.0.0.0:80 

你需要以root身份運行在端口上偵聽1024以下

或者你可以運行代理請求反向代理從端口80到應用程序監聽的某個更高端口。

+0

對於Azure中的Web應用程序,這聽起來過於複雜。其他人是否也需要這樣做? –

0

嘗試以root用戶身份運行該應用程序。

sudo node app.js 
+0

但是這是一個Windows環境..沒有'sudo' –

+0

哦對不起,我不知道,我建議使用'process.env.port'作爲您的portNumber。你可以嘗試一下,告訴我你得到了什麼? –

+0

'var portNumber = process.env.port;' –

0

我不知道Azure的,但我知道這一點:事情是試圖偵聽端口80,這需要管理員訪問權限(窗口)/須藤許可(Ubuntu的)。 首先,改變你的設置,80端口是計算機聽取外界世界任何事情的主要端口,不要改變這一點。 如果在您的應用程序中出現錯誤,那麼給予您的應用程序管理員訪問權限/ sudo權限可能會導致整個系統崩潰,請勿將這些權限授予應用程序。 如果你一定要聽80端口,偵聽到另一個端口,以及80端口到端口代理

3

您應該設置portNumber如下:

var portNumber = process.env.port || process.env.PORT || 1337 

天青通過一個端口在變量process.env.PORT和你必須使用它,因爲它不是一個真正的港口,而是像\\\\.\\pipe\\2f95e604-fc02-4365-acfc-010a26242d02這樣的管道。

+0

謝謝!這是一個拯救生命的人! – thsorens

相關問題