2013-03-05 137 views
0

我最近購買了Fujitsu服務器。我正在運行Linux Mint(Cinnamon)。無法在端口80上運行節點服務器

我安裝了Node.js,沒有問題,並且可以在80以外的任何可用端口上運行我的服務器腳本。起初,它響應EACCES錯誤,但是當我以root身份運行node.js時,遠。現在它輸出的結果與我在任何其他端口上運行它一樣,但當我進入域時不會工作。

var http = require('http'); 

http.createServer(server).listen(80); 

function server(req, res) { 
     res.writeHead(200, {'Content-Type': 'text/html'}); 
     res.end('Hello World\n'); 


    console.dir(req); 
} 

然命令行中殼爲:

/home/xymon/node/node server.js 
ス登錄後

我的代碼可以在我試過的任何其他端口上運行。甚至81.不是80,它把我拉上了牆。

+0

是否仍然運行腳本的舊過程?如果正在運行一箇舊的進程端口80仍在使用中。查看您的進程列表(ps aux)是否運行腳本的舊實例。 – Cromax 2013-03-05 13:08:15

+0

如果你不想使用nginx或httpproxy,這個答案可能很有用。 http://stackoverflow.com/a/6848861/1349025 – thtsigma 2013-03-05 13:12:10

+0

有沒有其他的節點運行的實例...有沒有辦法看到進程列表和他們正在使用的端口?我知道我在購買fujitsu之前在windows上運行我的服務器時必須更改skype的端口......我對linux的世界相當陌生。 – Xymon 2013-03-05 13:13:11

回答

2

一個選項是作爲sudo運行,這不是一個好的選擇,因爲你所有的站點代碼都會被提升。

另一種選擇是在備用端口上運行該站點,並將其放在nginx或httpproxy的後面。

var proxyPort = 80; 
var http = require('http'); 
var httpProxy = require('http-proxy'); 

var options = { 
    router: { 
     'localhost': '127.0.0.1:3000', 
     'site1.com': '127.0.0.1:3000', 
     'site2.com': '127.0.0.1:4000' 
    } 
}; 
console.log('Proxy Routing:') 
console.log(options); 
console.log(); 

var proxyServer = httpProxy.createServer(options); 
proxyServer.listen(proxyPort); 
console.log('Proxy listening on port ' + proxyPort); 

這也具有能夠運行在端口80多個站點,你可以看到漂亮的好處,我也可以做端口3000,但只能在本地網站。

1

善良,多麼冒險!

我已經通過以下步驟解決了問題。

  1. 打開端口80 - 100
  2. 在端口100
  3. 運行服務器Redirrecting口80〜100 ... 的iptables -t NAT -A PREROUTING -p tcp的--dport 80 -j REDIRECT - 對端口100
  4. 在sudo中運行Node.js。

謝謝大家的幫助,這是一個爲期兩天的運行,但我正在學習!

完成的產品:http://io-chat.com/home