Section courante

A propos

Section administrative du site

 Serveur  Installation  Utilisation  Tutoriel  Aide 
Vue par liste complète
Installation
Introduction
Référence des directives
Référence des variables
Référence des modules
Les premiers pas
Contrôler nginx
Méthodes de traitement des connexions
Configuration des hachages
Un journal de bord de débogage
Enregistrement dans syslog
Fichier de configuration des unités de mesure
Paramètres de la ligne de commande
nginx pour Windows
Prise en charge de QUIC et HTTP/3
Comment Nginx traite une requête
Noms des serveurs
Utilisation de nginx comme équilibreur de charge HTTP
Configuration des serveurs HTTPS
Comment Nginx traite une session TCP/UDP
Les opérations
(Re)démarrer/arrêter
Préface
Notes légal
Dictionnaire
Recherche

Contrôler nginx

Le nginx peut être contrôlé à l'aide de signaux. L'ID de processus du processus maître est écrit par défaut dans le fichier /usr/local/nginx/logs/nginx.pid. Ce nom peut être modifié au moment de la configuration ou dans nginx.conf à l'aide de la directive pid. Le processus maître prend en charge les signaux suivants :

Signal Description
TERM, INT Arrêt rapide
QUIT Arrêt gracieux
HUP Modification de la configuration, suivi d'un fuseau horaire modifié (uniquement pour FreeBSD et Linux), démarrage de nouveaux processus de travail avec une nouvelle configuration, arrêt progressif des anciens processus de travail.
USR1 Réouverture des fichiers journaux
USR2 Mise à niveau d'un fichier exécutable
WINCH Arrêt gracieux des processus de travail

Les processus de travail individuels peuvent également être contrôlés à l'aide de signaux, même si cela n'est pas obligatoire. Les signaux pris en charge sont les suivants :

Signal Description
TERM, INT Arrêt rapide
QUIT Arrêt gracieux
USR1 Réouverture des fichiers journaux
WINCH Arrêt anormal pour le débogage (nécessite l'activation de debug_points)

Modification de la configuration

Pour que nginx puisse relire le fichier de configuration, un signal HUP doit être envoyé au processus maître. Le processus maître vérifie d'abord la validité de la syntaxe, puis essaie d'appliquer une nouvelle configuration, c'est-à-dire d'ouvrir des fichiers journaux et de nouveaux sockets d'écoute. Si cela échoue, il annule les modifications et continue de travailler avec l'ancienne configuration. Si cela réussit, il démarre de nouveaux processus de travail et envoie des messages aux anciens processus de travail leur demandant de s'arrêter correctement. Les anciens processus de travail ferment les sockets d'écoute et continuent de servir les anciens clients. Une fois tous les clients servis, les anciens processus de travail sont arrêtés.

Illustrons cela par un exemple. Imaginons que nginx soit exécuté sur FreeBSD et que la commande :

ps axw -o pid,ppid,user,%cpu,vsz,wchan,command | egrep '(nginx|PID)'

produit la sortie suivante :

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
33126     1 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
33127 33126 nobody   0.0  1380 kqread nginx: worker process (nginx)
33128 33126 nobody   0.0  1364 kqread nginx: worker process (nginx)
33129 33126 nobody   0.0  1364 kqread nginx: worker process (nginx)

Si HUP est envoyé au processus maître, la sortie devient :

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx
33129 33126 nobody   0.0  1380 kqread nginx: worker process is shutting down (nginx)
33134 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)
33135 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)
33136 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)

L'un des anciens processus de travail avec le PID 33129 continue de fonctionner. Après un certain temps, il se ferme :

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx
33134 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)
33135 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)
33136 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)

Rotation des fichiers journaux

Pour faire tourner les fichiers journaux, il faut d'abord les renommer. Ensuite, le signal USR1 doit être envoyé au processus maître. Le processus maître rouvre alors tous les fichiers journaux actuellement ouverts et leur attribue un utilisateur non privilégié sous lequel les processus de travail s'exécutent, en tant que propriétaire. Après une réouverture réussie, le processus maître ferme tous les fichiers ouverts et envoie le message au processus de travail pour lui demander de rouvrir les fichiers. Les processus de travail ouvrent également de nouveaux fichiers et ferment immédiatement les anciens fichiers. Par conséquent, les anciens fichiers sont presque immédiatement disponibles pour le post-traitement, comme la compression.

Mise à niveau de l'exécutable à la volée

Pour mettre à niveau l'exécutable du serveur, le nouveau fichier exécutable doit d'abord être placé à la place d'un ancien fichier. Ensuite, le signal USR2 doit être envoyé au processus maître. Le processus maître renomme d'abord son fichier avec l'ID de processus en un nouveau fichier avec le suffixe .oldbin, par exemple /usr/local/nginx/logs/nginx.pid.oldbin, puis démarre un nouveau fichier exécutable qui à son tour démarre de nouveaux processus de travail :

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx
33134 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)
33135 33126 nobody   0.0  1380 kqread nginx: worker process (nginx)
33136 33126 nobody   0.0  1368 kqread nginx: worker process (nginx)
36264 33126 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

Après cela, tous les processus de travail (anciens et nouveaux) continuent d'accepter les demandes. Si le signal WINCH est envoyé au premier processus maître, il enverra des messages à ses processus de travail, leur demandant de s'arrêter correctement, et ils commenceront à sortir :

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx
33135 33126 nobody   0.0  1380 kqread nginx: worker process is shutting down (nginx)
36264 33126 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

Après un certain temps, seuls les nouveaux processus de travail traiteront les demandes :

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
33126     1 root     0.0  1164 pause  nginx: master process /usr/local/nginx/sbin/nginx
36264 33126 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)

Il convient de noter que l'ancien processus maître ne ferme pas ses sockets d'écoute et qu'il peut être géré pour redémarrer ses processus de travail si nécessaire. Si pour une raison quelconque le nouveau fichier exécutable fonctionne de manière inacceptable, l'une des opérations suivantes peut être effectuée :

Si le nouveau processus maître se ferme, l'ancien processus maître supprime le suffixe .oldbin du nom de fichier avec l'ID de processus.

Si la mise à niveau a réussi, le signal QUIT doit être envoyé à l'ancien processus maître et seuls les nouveaux processus resteront :

  PID  PPID USER    %CPU   VSZ WCHAN  COMMAND
36264     1 root     0.0  1148 pause  nginx: master process /usr/local/nginx/sbin/nginx
36265 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36266 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)
36267 36264 nobody   0.0  1364 kqread nginx: worker process (nginx)


PARTAGER CETTE PAGE SUR
Dernière mise à jour : Lundi, le 30 décembre 2024