46 votes

Comment organiser plusieurs serveurs Express sur le même système?

Je suis l'aide d'un serveur pour héberger plusieurs Node.js web apps, qui sont distribués dans plusieurs domaines. Ma pratique actuelle consiste à exécuter un Express server pour chaque application sur un autre port, et à exécuter un serveur de base que tout simplement routes (redirections) les requêtes vers le port correct/Express server. Cela fonctionne, mais cela signifie que mon serveur de base est de routage de chaque requête HTTP (et manuellement en la redirigeant), et que mes utilisateurs voir mes applications hébergées à [hostname.com]:8000.

Après un peu de recherche, j'ai trouvé que je peux utiliser http-proxy pour mes besoins de routage, mais je voudrais encore savoir si il y a une bonne pratique pour l'exécution de plusieurs Exprimer des serveurs sur le même système. Voici comment je vais la faire:

Chaque application dispose de son propre dossier, et pour Exprimer la structure de dossier (app.js, les itinéraires, les points de vue, etc.) Les applications seront regroupées par domaine, de sorte qu'un exemple de structure de dossier serait:

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

Je vais devoir courir chaque app.js séparément avec nœud (ou pour toujours, que je suis en train de l'utiliser), et chacun devra utiliser un port différent à l'interne, avec la croix-application redirige être signalé au port de l'application cible.

Donc, c'est mon plan actuel. Quels sont les problèmes avec elle, et quels sont les pièges devrais-je essayer de l'éviter? Plus important encore, est-t-il un solution à ce problème - le problème de l'hébergement de plusieurs applications web sur le même système avec le Noeud.js/Express?

EDIT: je vais finalement utiliser les WebSockets et HTTPS, et la quantité de bande passante ma configuration peut prendre en charge est de peu d'importance pour moi, c'est un serveur de développement (au moins pour l'instant). Merci à David Ellis pour amener la question des WebSockets.

DEUXIÈME EDIT: Merci pour les deux EhevuTov et David Ellis pour leurs réponses, qui ont contribué grandement. Je suis encore de s'installer sur une structure globale pour mon application, et il semble que cette question est abordée dans le détail de cette question StackOverflow

TROISIÈME EDIT: j'ai parcouru du chemin depuis l'affichage de cette question (mais j'ai encore beaucoup à faire). Découvrez ce fichier dans mon dépôt GitHub, qui tire parti de ce que j'ai appris à partir des réponses à cette question!

36voto

EhevuTov Points 6010

Depuis Express utilise Connecter, je suis sûr que vous pouvez utiliser Connect hôte virtuel du middleware. Il fonctionne de manière similaire à d'autres vhost modules sur d'autres produits. Je n'ai pas plusieurs domaines de tester et de vous montrer bon code, mais je pense que c'est quelque chose comme ceci:

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

Si vous arrivez à un point où l'on Exprimer serveur n'est pas assez, alors regardez dans l'aide du Nœud.Cluster à partir de l'API. Si cela n'est pas suffisant, alors que la pratique courante est de mettre un asnyc proxy inverse comme Nginx devant Expresse de votre part, les serveurs et les point les procurations à votre Express serveurs.

6voto

David Ellis Points 4278

Si vous n'avez pas besoin d'utiliser les WebSockets (ou tout HTTP 1.1 fonctionnalité, vraiment), vous pouvez utiliser NginX en tant que votre proxy.

L'avantage est la charge totale de NginX peut gérer contre Nœud est plus élevé (être compilés statiquement et spécialisés pour ce genre de chose, en gros), mais vous perdez la possibilité de diffuser toutes les données (l'envoi de petits morceaux à la fois).

Pour un petit site, ou si vous n'êtes pas sûr de ce que les caractéristiques que vous aurez besoin à l'avenir, il est probablement préférable de coller avec node-http-proxy et seul commutateur de NginX si vous pouvez démontrer la procuration est le goulot d'étranglement sur votre serveur. Heureusement NginX n'est pas dur à mettre en place si vous ne vous en aurez besoin plus tard.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X