Question

J'utilise un serveur pour héberger plusieurs applications Web Node.js, qui sont répartis sur plusieurs domaines. Ma pratique actuelle est d'exécuter un serveur Express pour chaque application sur un autre port, et d'exécuter un serveur de base qui simplement itinéraires (redirige) demande au bon port / serveur Express. Cela fonctionne, mais cela signifie que mon serveur de base achemine chaque requête HTTP (et en redirigeant manuellement), et que mes utilisateurs voient mes applications comme hébergé sur [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 s'il y a une meilleure pratique pour exécuter plusieurs serveurs express sur le même système. Voici comment je prévois le faire:

Chaque application Web aura son propre dossier, avec une structure de dossiers Express (app.js, itinéraires, points de vue, etc.) Apps seront regroupées par domaine, donc une structure de dossier exemple 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 noeud (ou toujours , qui Je suis actuellement à l'aide), et chacun devra utiliser un autre port interne, avec redirection croisée app étant pointées sur le port de l'application cible.

Alors, c'est mon plan actuel. Quels sont les problèmes avec elle, et quels sont les écueils que je devrais essayer d'éviter? Plus important encore, est-il une solution établie à ce problème - le problème de l'hébergement de plusieurs applications Web sur le même système avec Node.js / EXPRES

?

EDIT: Je fais plan pour éventuellement utiliser WebSockets et HTTPS, et la quantité de bande passante ma configuration support de boîte est de peu d'importance pour moi - c'est un serveur de développement (au moins pour l'instant). Merci à David Ellis pour avoir soulevé la question de WebSockets.

DEUXIÈME EDIT: Merci à la fois EhevuTov et David Ellis pour leurs réponses, ce qui a contribué grandement les deux. Je me installe toujours sur une structure globale pour mon application, et il semble que cette question est abordée en détail par cette question StackOverflow

TROISIÈME EDIT: Je suis venu d'une façon depuis l'affichage de cette question (bien que j'ai encore beaucoup à faire). Consultez ce fichier dans mon dépôt GitHub , qui tire parti de ce J'ai appris des réponses à cette question!

Était-ce utile?

La solution

Depuis Express utilise Connect , je suis assez sûr que vous pouvez utiliser le middleware d'hôte virtuel Connect. Il fonctionne de manière similaire à d'autres modules de vhost sur d'autres produits. Je n'ai pas plusieurs domaines à tester et vous montrer le 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 au point où un serveur Express ne suffit pas, puis regardez en utilisant le Node.Cluster de l'API. Si tel est aussi pas assez, la pratique actuelle est de mettre un asnyc proxy inverse tels que Nginx devant vos serveurs Express et pointer les proxies à vos serveurs Express.

Autres conseils

Si vous ne avez pas besoin de WebSockets d'utilisation (ou tout autre élément HTTP 1.1, vraiment), vous pouvez utiliser nginx comme proxy au lieu .

L'avantage est la charge totale Nginx peut gérer par rapport à nœud est plus élevé (étant compilé statiquement et spécialisé pour ce genre de chose, au fond), mais vous perdez la possibilité de diffuser des données (envoi de morceaux plus petits à la fois).

Pour un petit site, ou si vous ne savez pas ce que vous aurez besoin à fonctionnalités l'avenir, il est probablement préférable de bâton avec node-http-proxy et passer uniquement Nginx si vous pouvez démontrer le proxy est le goulot d'étranglement sur votre serveur. Heureusement Nginx n'est pas difficile à mettre en place si vous en avez besoin plus tard.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top