Bonjour à tous,

J'ai une question à propos de Nginx et NodeJS. J'ai un peu bidouillé pour voir ce qu'offrait Nginx et j'ai remarqué qu'il offrait une possibilité de multithreads avec les workers. De ce que j'ai compris et remarqué, Nginx crée plusieurs processus de NodeJS auquels ils distribuent les requêtes. Mais il y a une chose que je ne comprends pas. Comment se fait-il qu'il n'y ait pas de conflicts avec les ports ? Vu ques tous les processus de NodeJS écoutent le même port. Apparement, Nginx peut faire ça de manière indépendant à l'application qui écoute (NodeJS sur le port 80 chez moi). Donc, je me demande si ce n'est pas une fonctionnalité de l'OS qui permet de faire cela (c'est aussi pour cela que j'ai posté la question sur le forum Linux).

J'ai un peu cherché sur le web, mais je ne trouve pas de réponse. La plupart du temps, on parle de mettre les multithreads pour accélérer le service, mais personne n'explique le fonctionnement. J'avoue ne pas comprendre comment Nginx fait pour que les processus NodeJS (j'en avais 2 sur mon ordinateur) écoute le même port. Je fais aussi la suppostion que Nginx ne modifie pas le code de NodeJS pour faire écouter à chaque processus un port différent.

Je remercie d'avance tous ceux qui m'aideront à comprendre et même ceux qui liront le post :p

4 réponses


Je ne comprends pas trop ta configuration car Nginx ne pilote pas NodeJS. Il ne fait que proxy vers le processus NodeJS (ou le serveur suivant ta conf).

En fait, j'utilise Nginx devant NodeJS (je crois qu'on appelle ça un front server. Mais je débute en web, donc, je ne suis pas certain du nom). Mon but étant de "multithreader" NodeJS. Pour l'instant, j'utilise cette configuration:

...
        location / {

            #permet de passer les requetes de nginx a node.js. Le serveur nginx agit comme un proxy qui passe ensuite les requetes à node.js

            proxy_pass http://localhost:8080;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }
    }
...

En utilisant le gestionnaire de tâche windows, je remarque que plusieurs processus sont crées comme on peut le voir sur l'image:

De plus, en regardant avec netstat, je remarque qu'aucun processus node.js n'écoute sur le port habituel (j'utilise le port 8080 dans l'application node).

Voilà, j'espère que ce sera mieux comme ça. J'aurais du mettre la configuration directement, désolé ^^'

En fait c'est la thread pool de nodeJS qui fait que tu vois plein de processus mais node js est single thread cf https://www.grafikart.fr/formations/nodejs/nodejs-intro .

Oh, je n'avais pas remarqué cela ! Je savais que NodeJS était monothreat mais j'ignorais que NodeJS utilisait plusieurs threads en interne.
Cela éclaircie une partie de ma question =D Mais alors, à quoi sert les différents workers dans Nginx ? A partir du moment où NodeJS effectue toutes les tâches, je ne vois pas l'utilité d'avoir plusieurs workers au niveau de Nginx. Pourtant, quand je regarde sur le web, je vois partout que c'est l'un des premiers conseils donné :/