Frage

Ich verwende einen Server zum Hosten mehrerer Node.js-Webanwendungen, die auf mehrere Domänen verteilt sind. Meine derzeitige Praxis besteht darin, einen Express-Server für jede App an einem anderen Port auszuführen und einen Basisserver auszuführen, der Anforderungen einfach an den richtigen Port / Express-Server weiterleitet (umleitet). Dies funktioniert, bedeutet jedoch, dass mein Basisserver jede einzelne HTTP-Anforderung weiterleitet (und diese manuell umleitet) und dass meine Benutzer meine Apps als unter [hostname.com] gehostet sehen: 8000.

Nach einigen Recherchen habe ich festgestellt, dass ich http-proxy für meine Routing-Anforderungen, aber ich möchte trotzdem wissen, ob es eine bewährte Methode zum Ausführen mehrerer Express-Server auf demselben System gibt. So plane ich es:

Jede Web-App verfügt über einen eigenen Ordner mit einer vollständigen Express-Ordnerstruktur (app.js, Routen, Ansichten usw.). Apps werden nach Domänen gruppiert. Eine beispielhafte Ordnerstruktur lautet also:

    hostname.com/
        app.js
        routes/
        views/
        ...
        app1/
            app1.js
            routes/
            views/
            ...
        app2
        ...
    hostname2.com/
        app.js
        routes/
        views/
        ...

Ich muss jede app.js separat mit node (oder mit für immer ausführen, was Ich verwende derzeit), und jeder muss intern einen anderen Port verwenden, wobei app-übergreifende Weiterleitungen auf den Port der Ziel-App verweisen.

Das ist also mein aktueller Plan. Was sind die Probleme damit und welche Fallstricke sollte ich vermeiden? Am wichtigsten ist, gibt es eine etablierte Lösung für dieses Problem - das Problem, mehrere Web-Apps mit Node.js / Express auf demselben System zu hosten?

BEARBEITEN: Ich plane, irgendwann WebSockets und HTTPS zu verwenden, und die Menge an Bandbreite, die mein Setup unterstützen kann, ist für mich von geringer Bedeutung - dies ist ein Entwicklungsserver (zumindest für den Moment). Vielen Dank an David Ellis für das Thema WebSockets.

ZWEITE BEARBEITUNG: Vielen Dank an EhevuTov und David Ellis für ihre Antworten, die beide sehr geholfen haben. Ich entscheide mich immer noch für eine Gesamtstruktur für meine Anwendung, und es sieht so aus, als würde diese Frage von diese StackOverflow-Frage

DRITTE BEARBEITUNG: Seit ich diese Frage gestellt habe, bin ich einen Weg gegangen (obwohl ich noch viel weiter gehen muss). Schauen Sie sich diese Datei in meinem GitHub-Repository an, die was nutzt Ich habe aus den Antworten auf diese Frage gelernt!

War es hilfreich?

Lösung

Da Express Connect verwendet, bin ich mir ziemlich sicher, dass Sie die virtuelle Host-Middleware von Connect verwenden können.Es funktioniert ähnlich wie andere vhost-Module bei anderen Produkten.Ich habe nicht mehrere Domänen, um den richtigen Code zu testen und anzuzeigen, aber ich würde denken, dass es ungefähr so ist:

express.createServer()
.use(express.vhost('hostname1.com', require('/path/to/hostname1').app)
.use(express.vhost('hostname2.com', require('/path/to/hostname2').app)
.listen(80)

Wenn Sie an einem Punkt angelangt sind, an dem ein Express-Server nicht mehr ausreicht, sollten Sie den Node.Cluster über die API verwenden.Wenn dies auch nicht ausreicht, stellen Sie derzeit einen Asnyc-Reverse-Proxy wie Nginx vor Ihre Express-Server und verweisen Sie die Proxys auf Ihre Express-Server.

Andere Tipps

Wenn Sie WebSockets (oder eine andere HTTP 1.1-Funktion) nicht verwenden müssen, Sie können stattdessen NginX als Proxy verwenden .

Der Vorteil ist, dass die Gesamtlast, die NginX bewältigen kann, im Vergleich zu Node höher ist (statisch kompiliert und im Grunde genommen auf diese Art von Dingen spezialisiert), aber Sie verlieren die Fähigkeit, Daten zu streamen (jeweils kleinere Blöcke senden).

Für eine kleinere Site oder wenn Sie sich nicht sicher sind, welche Funktionen Sie in Zukunft benötigen, ist es wahrscheinlich besser, sich an node-http-proxy zu halten und nur dann zu NginX zu wechseln, wenn Sie nachweisen können, dass der Proxy der Engpass auf Ihrem Server ist.Glücklicherweise ist NginX nicht schwer einzurichten, wenn Sie es später benötigen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top