簡體   English   中英

無法在端口80或443上運行node.js Web服務

[英]cannot run node.js webservice on port 80 or 443

我有一個運行CENTOS的VPS,並且正在嘗試使用Node.js。 我運行了一個示例Node.js服務器,它在各個端口上正確運行,但是每當我嘗試在端口80上運行節點時(443的相同錯誤),我都會收到以下錯誤:

root@mic [~/Projects/NodeTutorial2]# node index.js
Server running on port 80.

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: listen EADDRINUSE
    at errnoException (net.js:883:11)
    at Server._listen2 (net.js:1021:14)
    at listen (net.js:1043:10)
    at Server.listen (net.js:1109:5)
    at Object.<anonymous> (/root/Projects/NodeTutorial2/index.js:8:4)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)

我嘗試通過執行以下操作將端口80重定向到3000:

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000

顯然,我執行了此命令兩次,因為:當我執行了:sudo iptables -t nat -L時,它返回了:

root@mic [~]# sudo iptables -t nat -L
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
REDIRECT   tcp  --  anywhere             anywhere            tcp dpt:http redir ports 3000
REDIRECT   tcp  --  anywhere             anywhere            tcp dpt:http redir ports 3000

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

但無濟於事,我仍然遇到相同的錯誤。

我試圖用netstat -tulpn |查看端口80上正在運行什么。 grep:80命令,它返回:

tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      477/httpd
tcp        0      0 :::80                       :::*                        LISTEN      477/httpd

因此,我終止了在端口80上運行的進程,並立即啟動了VPS。

我應該在哪個端口上運行node.js Web服務?

根據我的膩子設置,我要訪問的端口是端口22,所以我不知道那里發生了什么。 此外,我不打算以root用戶身份運行Web服務。 我創建了另一個具有較少權限的用戶,該用戶將運行node.js網絡服務。

  1. 設置nodejs以使用端口8000
  2. 安裝nginx並將其設置為您的nodejs應用程序的反向代理。

不要使用Apache,它會為每個請求創建一個線程/進程,而nginx不會。 它的工作原理類似於nodejs事件循環,在這里,您有一個需要處理的請求隊列,nginx工作進程從隊列中獲取每個請求並對其進行處理-在您的情況下,將請求發送到nodejs服務器,然后等待響應。

而且永遠不要在端口80上使用nodejs,因為有太多的用例需要處理,因此無需重新發明輪子

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM