2017-07-04 1 views
0

Ich habe eine ausdrückliche, dass ich auf Port 80 ausgeführt werden soll ->app.listen(80);Lauf Knoten App über PM2 auf Port 80

Ich verwende PM2 die App zu verwalten (Neustarten, Stoppen, Überwachung, usw.). Ich habe ein Deployment-Shell-Skript, dessen letzter Befehl PM2 restart index ist. Von der Konsolenausgabe sehe ich keine Fehler und PM2 meldet, dass es den Befehl erfolgreich abgeschlossen hat. Aber als ich zu my.ec2.ip.address:80 kam, ist die Seite nicht verfügbar. Außerdem, wenn ich node index.js in meinem Server-Projektverzeichnis ausführen, erhalte ich eine Error: listen EACCES 0.0.0.0:80. Dies ist für mich sinnvoll, da Port 80 unter 1024 liegt und daher ein privilegierter Port ist. sudo node index.js ermöglicht den Start zu arbeiten.

Ich bin ein Neuling, Unix, Server, Berechtigungen und Bereitstellung, so dass zusätzlich zu der Lösung eine Erklärung der grundlegenden Konzepte zu meinem Problem sehr geschätzt werden würde. Zum Beispiel ... ist es schlecht, meine Knoten-App einfach als Super-User zu betreiben? Ist es eine gute Übung, PM2 (also möglicherweise laufenden Knoten als ..?) Root/super-user? Der Befehl sudo PM2 restart index führt zu sudo: pm2: command not found. Warum wird PM2 nicht gefunden, wenn sudo PM2 ausgeführt wird. Wenn PM2 in meinem Pfad ist?

Schließlich, wenn ich PM2 verwende, wie kann ich sicherstellen, dass mein Server auf Port 80 läuft? nicht gefunden.

Antwort

2

Es ist gut, so wenig wie möglich als privilegierter Benutzer zu arbeiten, da Sie den potenziellen Schaden begrenzen wollen, falls jemand Ihr Programm ausnutzt. Sie möchten Ihren Node-Code nicht als root ausführen, es sei denn, Sie müssen dies unbedingt tun.

Daher ist es besser, Ihr Node-Programm auf einem nicht privilegierten Port (z. B. Port 8000) auszuführen und stattdessen einen leichten Webserver wie Nginx auf Port 80 zu horchen und den Datenverkehr einfach an Ihr Node-Programm weiterzuleiten.

Wenn Sie mit Nginx gehen wollen, können Sie diese Konfiguration verwenden zu tun genau das, was ich oben beschrieben, und dann mit Ihrem Knoten Programm auf Port 3000 nur hören:

server { 
    listen 80 default; 
    listen [::]:80 default; 

    location/{ 
    proxy_pass http://127.0.0.1:3000; 
    proxy_set_header Host $host; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for; 
    } 
} 
2

Dont verwenden Port 80, laufen wie 8080 auf andere Port und

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

Nach dem Ausführen dieser konnte ich auf http://example.org:80, aber http://example.org nicht zugreifen. Um diesen Befehl rückgängig zu machen: http://lubos.rendek.org/remove-all-iptables-prerouting-nat-rules/ –

0

nach vieler Zeit mit diesem Befehl 80 an diesem Port umleiten nginx verbrachten konfigurieren, es schließlich deinstallieren und anschließend AJ Vorschlag zur Konfiguration iptables. Danke A.J.

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

Aber, wenn jemand ein perfektes Tutorial weiß nginx zu konfigurieren, wäre eine große Hilfe sein.