2017-01-23 1 views
0

Ich möchte meine Entwicklungsumgebung so einrichten, dass alle Anfragen von www.dev.com in meinem Browser an localhost:8080 weitergeleitet werden.Node.js Express-Setup-Proxy für Entwicklungsumgebung, Localhost in URL für Mac OS X vermeiden

Ich habe in meinem/etc/host 127.0.01 www.dev.com hinzugefügt, aber es tut nicht die Portweiterleitung. Wenn ich auf http://www.dev.com:8080/ gehe, funktioniert es, aber ich möchte/muss stattdessen http://www.dev.com/ verwenden, was näher an der tatsächlichen Produktionsumgebung liegt.

Wie mache ich das? Ich habe mehrere Lösungen wie nginx versucht, aber ich mag es nicht, ich würde es vorziehen, es "skriptfähig" zu sein, so dass jeder andere Entwickler es direkt verwenden kann. Ich benutze Express.js mit Knoten.

Ich lese durch Assigning a domain name to localhost for development environment on Mac OS X with node.js, aber es erklärt tatsächlich nicht den Port-Forwarding-Teil.

+0

Warum haben Ihre Knoten App hören auf Port 80 statt 8080 (obwohl es erforderlich ist, deine Node-App als root auszuführen)? – robertklep

+0

Weil das Ausführen einer App als root schlecht ist, weil das Verhalten von der Produktion abweichen kann. Es ist eigentlich eine sehr einfache und schlechte Art, IMO zu gehen. Zum Beispiel könnte das Schreiben einer Datei als root funktionieren, aber nicht in der Produktion, und deshalb wüssten Sie nicht einmal, dass es ein Problem gibt, bis es die Produktion erreicht. – Vadorequest

+0

Richtig, obwohl jede sinnvolle App, die als root ausgeführt werden würde, Privilegien fallen lassen sollte, sobald sie die Sache ausgeführt hat, für die sie root privs benötigt (zB Port 80). Aber die vorgeschlagene Antwort ist eine viel bessere Lösung. In Ihrer Produktionsumgebung muss _something_ auch Port 80 überwachen. Wenn Sie also eine enge Übereinstimmung mit dem haben wollen, was bei der Produktion läuft, müssen Sie wahrscheinlich etwas sehr ähnliches einrichten (Reverse Proxy?). – robertklep

Antwort

2

Sie können Mac Port Forwarding verwenden. Die Bindung an Port 80 erfordert Root-Rechte (alles unter 1024 (?) Benötigt root) und es ist wahrscheinlich am besten, keine Entwicklungsanwendung mit root auszuführen.

können Sie verwenden pfctl Port-Forwarding

z.B. So leiten Sie Port 80 8080

echo "rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080" | sudo pfctl -ef - 

Quelle: https://salferrarello.com/mac-pfctl-port-forwarding/

Sie können auch ipfw verwenden (nicht verfügbar am El Capitan)

sudo ipfw add 100 fwd 127.0.0.1,8080 tcp from any to any 80 in 
+0

Schöne Lösung, obwohl 'ipfw' nicht mehr existiert (seit El Capitan, denke ich). – robertklep

+0

@robertklep behoben, danke. – Ryan

+0

'echo" rdr übergeben inet Proto tcp von einem beliebigen zu jedem Port 80 -> 127.0.0.1 Port 8080 "| sudo pfctl -ef -' funktioniert perfekt für Yosemite! :) – Vadorequest