Wie starte ich die node.js App auf Port 80? Blockieren Prozesse meinen Port?


8

Ich glaube, der Port 80 auf meiner Remote-Instanz ist blockiert, und ich versuche, eine node.js-App über Port 80 auszuführen. Ich habe mit den Ports 3000 und 3002 experimentiert und beide Ports funktionieren einwandfrei, aber beim Ausführen wird ein Fehler angezeigt auf Port 80. Ich vermute, dass Port 80 für meine Ausgabe von netstat -anunten blockiert ist , aber wie kann ich die Prozess-IDs der Adressen finden, die Port 80 unten blockieren?

[lucas@ecoinstance]~/node/nodetest1$ netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:3002            0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:27017         127.0.0.1:51108         ESTABLISHED
tcp        0      0 127.0.0.1:51106         127.0.0.1:27017         ESTABLISHED
tcp        0      0 127.0.0.1:27017         127.0.0.1:51106         ESTABLISHED
tcp        0      0 127.0.0.1:51107         127.0.0.1:27017         ESTABLISHED
tcp        0      0 10.240.241.116:3002     174.61.171.61:36583     TIME_WAIT  
tcp        0      0 127.0.0.1:27017         127.0.0.1:51109         ESTABLISHED
tcp        0      0 10.240.241.116:42423    169.254.169.254:80      ESTABLISHED
tcp        0      0 127.0.0.1:51108         127.0.0.1:27017         ESTABLISHED
tcp        0    532 10.240.241.116:22       174.61.171.61:56824     ESTABLISHED
tcp        0      0 127.0.0.1:27017         127.0.0.1:51107         ESTABLISHED
tcp        0      0 10.240.241.116:42412    169.254.169.254:80      ESTABLISHED
tcp        0      0 127.0.0.1:51109         127.0.0.1:27017         ESTABLISHED
tcp        0      0 127.0.0.1:51105         127.0.0.1:27017         ESTABLISHED
tcp        0      0 10.240.241.116:42422    169.254.169.254:80      TIME_WAIT  
tcp        0      0 127.0.0.1:27017         127.0.0.1:51105         ESTABLISHED
tcp6       0      0 :::22                   :::*                    LISTEN     
udp        0      0 0.0.0.0:49948           0.0.0.0:*                          
udp        0      0 0.0.0.0:68              0.0.0.0:*                          
udp        0      0 10.240.241.116:123      0.0.0.0:*                          
udp        0      0 127.0.0.1:123           0.0.0.0:*                          
udp        0      0 0.0.0.0:123             0.0.0.0:*                          
udp6       0      0 :::12151                :::*                               
udp6       0      0 :::123                  :::*                               
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     405680   /tmp/ssh-KdkxJfFLpKTC/agent.22
813
unix  2      [ ACC ]     STREAM     LISTENING     408230   /tmp/ssh-ofUeNNEwAqtP/agent.22
243
unix  2      [ ACC ]     STREAM     LISTENING     416227   /tmp/mongodb-27017.sock
unix  2      [ ACC ]     SEQPACKET  LISTENING     3692     /run/udev/control
unix  7      [ ]         DGRAM                    5286     /dev/log
unix  2      [ ACC ]     STREAM     LISTENING     5318     /var/run/acpid.socket
unix  2      [ ACC ]     STREAM     LISTENING     16170    /tmp//tmux-1000/default
unix  2      [ ACC ]     STREAM     LISTENING     414450   /var/run/dbus/system_bus_socke

Und hier ist das Protokoll, wenn versucht wird, mit node.js auf Port 80 ausgeführt zu werden:

[lucas@ecoinstance]~/node/nodetest1$ npm start

> nodetest1@0.0.1 start /home/lucas/node/nodetest1
> node ./bin/www


events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: listen EACCES
    at errnoException (net.js:904:11)
    at Server._listen2 (net.js:1023:19)
    at listen (net.js:1064:10)
    at Server.listen (net.js:1138:5)
    at Function.app.listen (/home/lucas/node/nodetest1/node_modules/express/lib/applicati
on.js:532:24)                                                                           
    at Object.<anonymous> (/home/lucas/node/nodetest1/bin/www:7:18)
    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)

npm ERR! nodetest1@0.0.1 start: `node ./bin/www`
npm ERR! Exit status 8
npm ERR! 
npm ERR! Failed at the nodetest1@0.0.1 start script.
npm ERR! This is most likely a problem with the nodetest1 package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node ./bin/www
npm ERR! You can get their info via:
npm ERR!     npm owner ls nodetest1
npm ERR! There is likely additional logging output above.
npm ERR! System Linux 3.13-0.bpo.1-amd64
npm ERR! command "/usr/local/bin/node" "/usr/local/bin/npm" "start"
npm ERR! cwd /home/lucas/node/nodetest1
npm ERR! node -v v0.10.28
npm ERR! npm -v 1.4.9
npm ERR! code ELIFECYCLE
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /home/lucas/node/nodetest1/npm-debug.log
npm ERR! not ok code 0

Und sudo netstat -lnpgibt keinen passenden Port 80 zurück:

[lucas@ecoinstance]~/node/nodetest1$ sudo netstat -lnp                           [48/648]
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Progr
am name
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      29160/mon
god    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1976/sshd

tcp6       0      0 :::22                   :::*                    LISTEN      1976/sshd

udp        0      0 0.0.0.0:49948           0.0.0.0:*                           1604/dhcl
ient   
udp        0      0 0.0.0.0:68              0.0.0.0:*                           1604/dhcl
ient   
udp        0      0 10.240.241.116:123      0.0.0.0:*                           2076/ntpd

udp        0      0 127.0.0.1:123           0.0.0.0:*                           2076/ntpd

udp        0      0 0.0.0.0:123             0.0.0.0:*                           2076/ntpd

udp6       0      0 :::12151                :::*                                1604/dhcl
ient   
udp6       0      0 :::123                  :::*                                2076/ntpd

Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   PID/Program name    Path
unix  2      [ ACC ]     STREAM     LISTENING     405680   22814/ssh-agent     /tmp/ssh-K
dkxJfFLpKTC/agent.22813
unix  2      [ ACC ]     STREAM     LISTENING     408230   24049/ssh-agent     /tmp/ssh-o
fUeNNEwAqtP/agent.22243
unix  2      [ ACC ]     STREAM     LISTENING     416227   29160/mongod        /tmp/mongo
db-27017.sock
unix  2      [ ACC ]     SEQPACKET  LISTENING     3692     284/udevd           /run/udev/
control
unix  2      [ ACC ]     STREAM     LISTENING     5318     1798/acpid          /var/run/a
cpid.socket
unix  2      [ ACC ]     STREAM     LISTENING     16170    5177/tmux           /tmp//tmux
-1000/default
unix  2      [ ACC ]     STREAM     LISTENING     414450   28213/dbus-daemon   /var/run/d
bus/system_bus_socket
unix  2      [ ACC ]     STREAM     LISTENING     404225   22324/1             /tmp/ssh-9
TlDmu4bjl/agent.22324

Antworten:


15

Sie versuchen, den Knoten als Nicht-Root-Benutzer zu starten. Unter Linux kann root standardmäßig nur an Ports 1024 oder niedriger gebunden werden.

Wenn Sie es als dieser Benutzer ausführen möchten, lesen Sie möglicherweise /programming/413807/is-there-a-way-for-non-root-processes-to-bind-to- privileged-ports-1024-on-l


1
Laut bindManpage: EACCES The address is protected, and the user is not the superuser.Und das sehen Sie EACCESin Ihrem Fehlerbericht.
Matthew Ife


1

Die einfachste und beste Antwort imho:

  • sudo apt-get install libcap2-bin
  • sudo setcap cap_net_bind_service=+ep /usr/local/bin/node
  • Ta da! Auf diese Weise kann Ihre Knoten-App auf Port 80 ausgeführt werden, ohne sich zu beschweren.

Warum mag ich es? Weil:

  • Sie müssen weder Apache noch Nginx verwenden
  • Sie müssen Ihre Anwendung nicht als root ausführen
  • Sie müssen keine Ports weiterleiten (und dies jedes Mal, wenn Ihr Computer startet).

Referenzlink: https://www.digitalocean.com/community/tutorials/how-to-use-pm2-to-setup-a-node-js-production-environment-on-an-ubuntu-vps (Ein großartiger Artikel Informationen zum Einrichten Ihrer Node-App für Cloud-Hosting).


Was ist mit anderen Plattformen als Ubuntu?
Michael

Sollte an irgendetwas arbeiten * nix, glaube ich
Kyle Chadha

1
Wie können wir diese Änderungen rückgängig machen, wenn es nicht funktioniert?
Ritesh

1

Ich habe versucht, den Server mit auszuführen node server.js. Es hat nicht zeigen einen Fehler auf. Ebenfalls,

lsof -t -i:80

keine Prozesse aufgelistet .

Das Problem war, dass ich versucht habe, als nicht privilegierter Benutzer zu binden. Es hat funktioniert, als ich versuchte:

sudo node server.js

So einfach, aber manchmal haben Sie es vielleicht vergessen und werden hinter anderen Serverprozessen ausgeführt, wenn auf Ihrem Computer mehrere Server wie Apache, Nginx usw. ausgeführt werden. (Genau wie ich). Hoffe das hilft jemandem !!!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.