Comment servir du contenu statique pour une application Node.js?

Question rapide sur la bonne infrastructure de serveur pour une application Node que je construis. L’application dispose d’une interface Web avec Angular qui utilise l’API intégrée à Node. Cette API sera également accessible par une application mobile. En termes d’infrastructure de serveur, quel est le moyen le plus rapide / le plus propre de le configurer? Je ferais normalement une simple configuration sur 3 serveurs, avec un serveur de nœuds, un serveur mongodb et un serveur nginx pour agir comme un proxy, et le serveur de nœuds doit servir tous les fichiers statiques pour l’interface Web, mais je ne suis pas sûr C’est la meilleure pratique ici. Donc mes deux questions sont:

  1. Serait-il préférable que le serveur nginx serve tout le contenu statique du frontend Web et que Node ne serve que l’API?

  2. L’application permet aux utilisateurs de télécharger des fichiers à stocker sur le serveur. Où est le meilleur endroit pour stocker et servir ces fichiers?

Voici une configuration Nginx de base pour assurer le service du contenu statique et transmettre tout le rest à une application Node.js:

location / { try_files $uri $uri/ @backend; } location @backend { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://127.0.0.1:3000; proxy_redirect off; } 

Je recommande à Nginx de servir le contenu statique car Nginx fait un excellent travail qui libère Node.js pour qu’il se concentre sur le service de l’application avec moins de requêtes.

Le téléchargement de fichier est géré dans votre Node.js. La seule partie gérée dans Nginx est le réglage de la taille limite de téléchargement des fichiers. Vous pouvez limiter cela à des blocs de location particuliers selon les besoins:

 client_max_body_size 20m; 

Il existe plusieurs packages de téléchargement de fichiers pour Node.js. Vous pouvez choisir entre des solutions qui diffusent les téléchargements avec une interface d’événements, comme connect-busboy ou une approche plus traditionnelle où toute la demande est complètement terminée avant d’y avoir access.

C’est à vous de décider où vous stockez vos téléchargements. Il est de plus en plus courant de transférer des téléchargements de fichiers sur un service de stockage tel que celui d’Amazon au lieu de les stocker localement. S3 fournit un stockage bon marché, une bande passante rapide et un stockage redondant, mais un répertoire local peut également répondre à vos besoins.

Selon les exigences de votre application, la configuration que j’utilise est la suivante:

  • Heroku pour le service Web node.js (avec mongodb ou postgresql pour la firebase database)
  • Amazon s3 pour mes ressources statiques, si elles doivent être privées, vous pouvez configurer une dissortingbution cloudfront pour servir des ressources privées à partir de votre compartiment s3.

Si vous êtes à la recherche de rapidité et de propreté, je vous recommande fortement d’utiliser Heroku, mais encore une fois, cela dépend de vos besoins spécifiques.

https://devcenter.heroku.com/articles/getting-started-with-nodejs#introduction