Nginx fonctionne comme un serveur frontal, qui dans ce cas procède par proxy aux demandes d'un serveur node.js. Par conséquent, vous devez configurer un fichier de configuration nginx pour le nœud.
Voici ce que j'ai fait dans ma boîte Ubuntu:
Créez le fichier yourdomain.com
à /etc/nginx/sites-available/
:
vim /etc/nginx/sites-available/yourdomain.com
Vous devriez y avoir quelque chose comme:
# the IP(s) on which your node server is running. I chose port 3000.
upstream app_yourdomain {
server 127.0.0.1:3000;
keepalive 8;
}
# the nginx server instance
server {
listen 80;
listen [::]:80;
server_name yourdomain.com www.yourdomain.com;
access_log /var/log/nginx/yourdomain.com.log;
# pass the request to the node.js server with the correct headers
# and much more can be added, see nginx config options
location / {
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://app_yourdomain/;
proxy_redirect off;
}
}
Si vous souhaitez que nginx (> = 1.3.13) gère également les requêtes Websocket, ajoutez les lignes suivantes dans la location /
section:
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
Une fois que vous avez cette configuration, vous devez activer le site défini dans le fichier de configuration ci-dessus:
cd /etc/nginx/sites-enabled/
ln -s /etc/nginx/sites-available/yourdomain.com yourdomain.com
Créez votre application de serveur de nœuds sur /var/www/yourdomain/app.js
et exécutez-la surlocalhost:3000
var http = require('http');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(3000, "127.0.0.1");
console.log('Server running at http://127.0.0.1:3000/');
Testez les erreurs de syntaxe:
nginx -t
Redémarrez nginx:
sudo /etc/init.d/nginx restart
Enfin, démarrez le serveur de noeud:
cd /var/www/yourdomain/ && node app.js
Vous devriez maintenant voir "Hello World" sur votredomaine.com
Une dernière remarque concernant le démarrage du serveur de nœuds: vous devez utiliser une sorte de système de surveillance pour le démon de nœuds. Il y a un tutoriel génial sur le nœud avec upstart et monit .
location / { proxy_pass http://127.0.0.1:3000; }
? Pourquoi avez-vous besoin duupstream
bit de configuration entier ?sites-enabled
etsites-available
répertoires à l'intérieur/etc/nginx
. Si votre version est venue sans ces deux répertoires, elle a probablement un seulconf.d
répertoire à la place. Dans ce cas, suivre ces instructions n'aurait aucun effet, À MOINS QUE vous ne modifiiez l'include
instruction à l'intérieur du fichiernginx.conf
pour pointer ausites-enabled
lieu de la valeur par défautconf.d
. J'espère que cela a du sens. Il devrait devenir explicite une fois que vous voyez la diteinclude
déclaration à l'intérieurnginx.conf
.Vous pouvez également configurer plusieurs domaines avec nginx et les transférer vers plusieurs processus node.js.
Par exemple, pour atteindre ces objectifs:
Ces ports (4000 et 5000) doivent être utilisés pour écouter les demandes d'application dans votre code d'application.
/ etc / nginx / sites-enabled / domain1
Dans / etc / nginx / sites-enabled / domain2
la source
http://example.com
est automatiquement302
« d pourhttp://www.example.com
. Pourquoi donc?proxy_set_header Host $host
pour éviter la redirection HTTP 302.Vous pouvez également avoir différentes URL pour les applications dans une configuration de serveur:
Dans / etc / nginx / sites-enabled / yourdomain :
Redémarrez nginx:
Démarrage des applications.
node app1.js
node app2.js
la source
Je proxy des applications Node Express indépendantes via Nginx.
Ainsi, de nouvelles applications peuvent être facilement montées et je peux également exécuter d'autres choses sur le même serveur à différents endroits.
Voici plus de détails sur ma configuration avec l'exemple de configuration Nginx:
De: http://skovalyov.blogspot.dk/2012/07/deploy-multiple-node-applications-on.html
la source
Node.js avec configuration Nginx.
ajoutez la configuration suivante afin que Nginx agisse comme une redirection proxy vers le trafic du port 3000 depuis le serveur lorsque nous venons de «subdomain.votre_domaine.com»
la source
répondre à votre question 2:
J'utiliserais l'option
b
simplement parce qu'elle consomme beaucoup moins de ressources. avec l'option 'a', chaque client fera que le serveur consommera beaucoup de mémoire, chargeant tous les fichiers dont vous avez besoin (même si j'aime php, c'est l'un des problèmes avec cela). Avec l'option 'b' vous pouvez charger vos bibliothèques (code réutilisable) et les partager entre toutes les demandes des clients.Mais sachez que si vous avez plusieurs cœurs, vous devez modifier node.js pour les utiliser tous.
la source
J'ai fait un dépôt dans Github que vous pouvez cloner, vagrant-node-nginx -ilerplate
Fondamentalement, l'application node.js
/var/www/nodeapp
est àet la configuration nginx
/etc/nginx/sites-available/
estla source
Vous pouvez également utiliser node.js pour générer des fichiers statiques dans un répertoire desservi par nginx. Bien sûr, certaines parties dynamiques de votre site peuvent être desservies par nœud, et certaines par nginx (statique).
Le fait que certains d'entre eux soient desservis par nginx augmente vos performances.
la source
Nous pouvons facilement configurer une application Nodejs par Nginx agissant comme un proxy inverse.
La configuration suivante suppose que l'application NodeJS s'exécute sur 127.0.0.1:8080,
dans la configuration ci-dessus, votre application Nodejs
HTTP_HOST
tête où vous pouvez appliquer une logique spécifique au domaine pour servir la réponse. "Votre application doit être gérée par un gestionnaire de processus comme pm2 ou un superviseur pour gérer les situations / réutiliser les sockets ou les ressources, etc.
Configurer un service de rapport d'erreurs pour obtenir des erreurs de production telles que sentinelle ou arceau
REMARQUE: vous pouvez configurer la logique pour gérer les itinéraires de demande spécifiques au domaine, créer un middleware pour l'application expressjs
la source
Nginx peut agir comme un serveur proxy inverse qui fonctionne exactement comme un chef de projet. Lorsqu'il reçoit une demande, il l'analyse et la transmet en amont (membres du projet) ou se gère lui-même. Nginx a deux façons de traiter une demande en fonction de sa configuration.
transmettre la demande à un autre serveur
}
Servir la demande
transmettre la demande à un autre serveur
Lorsque vous exécutez le serveur node.js sur le port 8000, nginx transmet la demande à node.js. Écrivez la logique node.js et gérez la demande. C'est tout, vous avez votre serveur nodejs fonctionnant derrière le serveur nginx.
Si vous souhaitez exécuter d'autres services que nodejs, exécutez simplement un autre service comme Django, flask, php sur différents ports et configurez-le dans nginx.
la source
Vous pouvez exécuter nodejs à l'aide de pm2 si vous souhaitez gérer chaque moyen de microservice et l'exécuter. Le nœud s'exécutera dans un port droit, il suffit de configurer ce port dans nginx (/etc/nginx/sites-enabled/domain.com)
Vérifiez si localhost est en cours d'exécution ou non en utilisant ping.
Et
C'est mieux et comme vous l'avez dit plus facile aussi
la source
La configuration la meilleure et la plus simple avec Nginx et Nodejs consiste à utiliser Nginx comme équilibreur de charge HTTP et TCP avec proxy_protocol activé. Dans ce contexte, Nginx sera en mesure de proxyer les requêtes entrantes vers nodejs, et également de mettre fin aux connexions SSL au (x) serveur (s) Nginx backend, et non au serveur proxy lui-même. (SSL-PassThrough)
À mon avis, il est inutile de donner des exemples non SSL, car toutes les applications Web utilisent (ou devraient utiliser) des environnements sécurisés.
Exemple de configuration pour le serveur proxy, dans /etc/nginx/nginx.conf
Maintenant, traitons le serveur Web principal. /etc/nginx/nginx.conf :
Maintenant, configurons l'hôte virtuel avec cette configuration SSL et proxy_protocol activée à /etc/nginx/sites-available/example.com-https.conf :
Et enfin, un échantillon de 2 serveurs web nodejs : Premier serveur:
Deuxième serveur:
Maintenant, tout devrait fonctionner parfaitement et équilibrer la charge.
Il y a quelque temps, j'ai écrit sur la façon de configurer Nginx comme équilibreur de charge TCP dans Docker . Vérifiez-le si vous utilisez Docker.
la source