15%

Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code :

Skills
Commencer
21.10.2024

Comment gérer Nginx : Démarrer, Arrêter, Redémarrer et Recharger sur Linux

Nginx est un serveur web et proxy inverse haute performance, piloté par les événements, qui dessert des millions d’environnements de production dans le monde entier. La gestion de son cycle de vie — démarrage, arrêt, redémarrage et rechargement — est contrôlée par le système d’initialisation Linux, soit systemd (Ubuntu 16.04+, CentOS 7+, Debian 8+), soit le framework legacy SysVinit. La distinction critique entre restart et reload n’est pas cosmétique : un redémarrage met fin à toutes les connexions actives, tandis qu’un rechargement effectue un échange de configuration sans interruption en forçant de nouveaux processus worker avant de drainer progressivement les anciens.

Ce guide couvre toutes les commandes opérationnelles dont vous avez besoin, les mécanismes sous-jacents de chacune, la validation de la configuration avant déploiement, les diagnostics basés sur les journaux, et les cas limites qui provoquent des échecs silencieux en production.

Prérequis

Avant d’émettre des commandes de gestion Nginx, confirmez les points suivants :

  • Vous disposez d’un accès root ou d’un compte utilisateur avec des privilèges sudo.
  • Nginx est installé (nginx -v doit retourner une chaîne de version).
  • Vous savez quel système d’initialisation utilise votre distribution (systemctl --version confirme systemd ; son absence indique SysVinit ou un autre gestionnaire).

Si vous provisionnez un nouveau serveur, un environnement Hébergement VPS fonctionnant sous Ubuntu 22.04 LTS ou Debian 12 utilisera systemd par défaut, ce qui est la voie recommandée pour tous les nouveaux déploiements.

Comprendre le modèle de processus Nginx

Nginx fonctionne avec un processus maître et un ou plusieurs processus worker. Le processus maître lit la configuration, se lie aux ports privilégiés (80, 443) et gère le cycle de vie des workers. Les workers gèrent les connexions client réelles. C’est pourquoi reload est sûr en production : le maître génère de nouveaux workers avec la configuration mise à jour pendant que les workers existants finissent de servir les requêtes en cours, puis se terminent proprement.

Lorsque vous émettez un restart forcé, le processus maître lui-même se termine et redémarre, abandonnant toutes les connexions ouvertes. Réservez cela aux situations où le processus maître lui-même est dans un mauvais état ou après des mises à niveau binaires.

Gérer Nginx avec systemd (distributions Linux modernes)

systemd est le gestionnaire de services standard sur toutes les distributions Linux contemporaines. Nginx s’y intègre via un fichier unit, généralement situé à /lib/systemd/system/nginx.service.

Démarrer Nginx

sudo systemctl start nginx

Cela active l’unité de service Nginx. Si le processus maître échoue à se lier à un port ou rencontre une erreur de configuration, systemd signalera immédiatement un échec. Vérifiez le code de sortie avec echo $? — une valeur non nulle signifie que le démarrage a échoué.

Arrêter Nginx

sudo systemctl stop nginx

Cela envoie SIGTERM au processus maître Nginx, qui signale ensuite aux workers de terminer les requêtes actives avant de s’arrêter. Si les workers ne se terminent pas dans le délai configuré, systemd envoie SIGKILL. Sur un serveur chargé, cela peut entraîner des connexions abandonnées — utilisez reload autant que possible à la place.

Redémarrer Nginx

sudo systemctl restart nginx

Un redémarrage est un arrêt séquentiel suivi d’un démarrage. Toutes les connexions actives sont terminées. Utilisez cela uniquement lorsque :

  • Le binaire Nginx lui-même a été mis à jour.
  • Le processus maître ne répond pas.
  • Vous devez libérer et re-lier les sockets d’écoute (par exemple, après un changement de port).

Exécutez toujours un test de configuration avant de redémarrer (couvert dans la section Validation ci-dessous).

Recharger Nginx (application de la configuration sans interruption)

sudo systemctl reload nginx

C’est la commande correcte pour appliquer des modifications de configuration en production. En interne, systemd envoie SIGHUP au processus maître Nginx. Le maître relit nginx.conf, le valide et génère de nouveaux processus worker. Les anciens workers continuent de servir les connexions existantes jusqu’à ce qu’ils soient inactifs, puis se terminent. La transition entière est transparente pour les utilisateurs finaux.

Cas limite critique : Si la nouvelle configuration contient une erreur, reload échouera silencieusement sur certaines distributions — l’ancienne configuration reste active, mais aucune erreur n’est affichée dans le terminal. C’est pourquoi la pré-validation avec nginx -t est non négociable avant chaque rechargement.

Vérifier le statut de Nginx

sudo systemctl status nginx

Cette commande affiche l’état du service (active (running), inactive (dead), failed), le PID du processus maître, l’utilisation de la mémoire et du CPU, et les dernières lignes du journal. C’est le diagnostic de première étape le plus rapide pour tout problème Nginx.

Exemple de sortie pour une instance saine :

● nginx.service - A high performance web server and a reverse/proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2025-01-13 10:22:04 UTC; 2h 15min ago
       Docs: man:nginx(8)
    Process: 1234 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on;
   Main PID: 1235 (nginx)
      Tasks: 3 (limit: 4915)
     Memory: 6.4M
        CPU: 312ms
     CGroup: /system.slice/nginx.service
             ├─1235 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             ├─1236 "nginx: worker process"
             └─1237 "nginx: worker process"

Activer Nginx au démarrage

sudo systemctl enable nginx

Sans cela, Nginx ne démarrera pas automatiquement après un redémarrage du serveur. Associez-le à la commande start en une seule invocation :

sudo systemctl enable --now nginx

Désactiver le démarrage automatique de Nginx

sudo systemctl disable nginx

Gérer Nginx avec SysVinit (systèmes legacy)

SysVinit se trouve sur les distributions en fin de vie telles que CentOS 6 et Ubuntu 14.04. Le wrapper service fournit une interface cohérente aux scripts d’initialisation situés dans /etc/init.d/.

ActionCommande SysVinit
Démarrer`sudo service nginx start`
Arrêter`sudo service nginx stop`
Redémarrer`sudo service nginx restart`
Recharger`sudo service nginx reload`
Statut`sudo service nginx status`

Si vous utilisez encore des systèmes basés sur SysVinit en production, la migration vers une distribution prise en charge est fortement recommandée. Ces systèmes ne reçoivent plus de correctifs de sécurité, ce qui crée une exposition significative pour tout serveur accessible depuis Internet.

systemd vs. SysVinit : comparaison des commandes

OpérationsystemdSysVinit
Démarrer le service`systemctl start nginx``service nginx start`
Arrêter le service`systemctl stop nginx``service nginx stop`
Redémarrer le service`systemctl restart nginx``service nginx restart`
Recharger la config`systemctl reload nginx``service nginx reload`
Vérifier le statut`systemctl status nginx``service nginx status`
Activer au démarrage`systemctl enable nginx``chkconfig nginx on`
Désactiver au démarrage`systemctl disable nginx``chkconfig nginx off`
Voir les journaux`journalctl -u nginx``/var/log/nginx/error.log`

Validation de la configuration avant tout changement de service

C’est l’habitude opérationnelle la plus importante lors de la gestion de Nginx. Un fichier de configuration défectueux provoquera l’échec de restart et laissera votre serveur hors ligne.

sudo nginx -t

Un test réussi retourne :

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Pour une sortie détaillée qui imprime également la configuration résolue (utile lors du débogage des directives include) :

sudo nginx -T

nginx -T vide la configuration fusionnée entière vers stdout, ce qui la rend précieuse pour auditer des configurations complexes avec plusieurs blocs server répartis dans /etc/nginx/conf.d/ ou /etc/nginx/sites-enabled/.

Flux de travail pour des modifications de configuration sécurisées :

# 1. Edit your configuration
sudo nano /etc/nginx/nginx.conf

# 2. Validate — stop here if errors are reported
sudo nginx -t

# 3. Apply with zero downtime
sudo systemctl reload nginx

# 4. Confirm the service is still healthy
sudo systemctl status nginx

Envoi de signaux directement au processus maître Nginx

Pour les scénarios où systemd n’est pas disponible ou lorsque vous avez besoin d’un contrôle précis, Nginx accepte les signaux POSIX directement via nginx -s :

sudo nginx -s reload    # Equivalent to SIGHUP — graceful config reload
sudo nginx -s reopen    # Reopen log files (used after log rotation)
sudo nginx -s stop      # Fast shutdown (SIGTERM)
sudo nginx -s quit      # Graceful shutdown — waits for workers to finish

Le PID du processus maître est stocké dans /var/run/nginx.pid par défaut. Vous pouvez également envoyer des signaux manuellement :

sudo kill -HUP $(cat /var/run/nginx.pid)

Le signal reopen est particulièrement important dans les pipelines de rotation des journaux. Lorsque logrotate déplace /var/log/nginx/access.log, Nginx continue d’écrire dans l’ancien descripteur de fichier jusqu’à ce que vous envoyiez reopen, moment auquel il crée et écrit dans le nouveau chemin de fichier.

Diagnostic des échecs : journaux et journal système

Lorsque Nginx échoue à démarrer ou à recharger, deux sources fournissent des données de diagnostic.

Journal systemd

sudo journalctl -u nginx --since "10 minutes ago"

Pour suivre la sortie en direct lors d’une tentative de redémarrage :

sudo journalctl -u nginx -f

Journal d’erreurs Nginx

sudo tail -n 50 /var/log/nginx/error.log

Pour la surveillance en temps réel :

sudo tail -f /var/log/nginx/error.log

Modèles d’échec courants et leurs causes :

  • bind() to 0.0.0.0:80 failed (98: Address already in use) — Un autre processus (Apache, une instance Nginx précédente) occupe le port 80. Identifiez-le avec sudo ss -tlnp | grep :80.
  • open() "/var/log/nginx/error.log" failed (13: Permission denied) — L’utilisateur worker Nginx n’a pas accès en écriture au répertoire des journaux.
  • nginx: [emerg] unknown directive — Une faute de frappe ou une directive de module non prise en charge dans nginx.conf. La sortie de nginx -t inclura le fichier exact et le numéro de ligne.
  • connect() failed (111: Connection refused) while connecting to upstream — Nginx fonctionne, mais l’application en amont (PHP-FPM, Node.js) ne fonctionne pas. Cela apparaît dans le journal d’erreurs, pas lors du démarrage.

Gérer Nginx sur des serveurs avec un panneau de contrôle

Si votre serveur exécute un panneau de contrôle tel que cPanel ou Plesk, Nginx peut être géré comme une couche de proxy inverse devant Apache, ou comme serveur web principal. Dans ces environnements, n’utilisez pas les commandes systemctl brutes pour redémarrer Nginx sans comprendre l’orchestration des services du panneau — certains panneaux remplacent le fichier unit systemd et gèrent Nginx via leurs propres superviseurs de démons.

Pour les environnements gérés par cPanel, la commande de redémarrage correcte est généralement :

/scripts/restartsrv_nginx

Un déploiement VPS avec cPanel gère la gestion des services via le Gestionnaire de services de WHM, qui fournit une interface graphique en plus des scripts CLI ci-dessus.

Pour les environnements où vous souhaitez un contrôle manuel complet sans panneau, explorez les Panneaux de contrôle VPS disponibles pour trouver une couche de gestion adaptée à votre modèle opérationnel.

Nginx sur du matériel dédié

Les déploiements à fort trafic utilisant Nginx comme équilibreur de charge ou point de terminaison TLS bénéficient considérablement de ressources dédiées. Sur un Serveur Dédié, vous pouvez ajuster le nombre de processus worker pour correspondre précisément aux cœurs CPU physiques, configurer de grandes valeurs worker_connections sans concurrence avec d’autres locataires, et utiliser les optimisations au niveau du noyau (SO_REUSEPORT, sendfile, tcp_nopush) à leur plein potentiel. Les commandes de gestion des services sont identiques aux environnements VPS — la différence réside dans ce que vous pouvez configurer, pas dans la façon dont vous contrôlez le service.

Si votre instance Nginx termine le trafic HTTPS, assurez-vous que vos certificats TLS sont à jour. Les certificats expirés provoquent des échecs de connexion immédiats que systemctl status nginx ne détectera pas — le service semble sain tandis que les clients reçoivent des erreurs de handshake SSL. Gérer vos Certificats SSL de manière proactive prévient cette classe d’échecs silencieux.

Matrice de décision opérationnelle

Utilisez cette matrice pour sélectionner l’action de gestion correcte pour une situation donnée :

SituationAction correcteRaison
Modification de `nginx.conf` ou d’un bloc server`nginx -t` puis `reload`Application de la configuration sans interruption
Le binaire Nginx a été mis à jour`restart`Le nouveau binaire doit être chargé en mémoire
Changement de liaison de port`restart`Le maître doit re-lier les sockets
Rotation des journaux terminée`nginx -s reopen`Rouvrir les descripteurs de fichiers vers les nouveaux chemins de journaux
Le processus maître ne répond pas`stop` puis `start`Forcer la terminaison et réinitialiser
Besoin de vérifier l’état du service`systemctl status nginx`Affiche le PID, la durée de fonctionnement, les dernières lignes de journal
Diagnostic d’un échec de démarrage`journalctl -u nginx` + `nginx -t`Contexte d’erreur complet des deux sources
Vérifier quel processus possède le port 80`ss -tlnpgrep :80`Identifier les conflits de port avant le démarrage

Points techniques clés à retenir

  • Exécutez toujours sudo nginx -t avant restart ou reload. Un test échoué vous empêche de mettre hors ligne un serveur en cours d’exécution avec une configuration défectueuse.
  • Préférez reload à restart en production. C’est non perturbateur et gère 99 % des scénarios de changement de configuration.
  • nginx -s quit est plus sûr que nginx -s stop lorsque vous devez arrêter manuellement — il attend que les workers drainent les connexions actives.
  • systemctl enable nginx est distinct de systemctl start nginx. Oublier enable signifie que Nginx ne survivra pas à un redémarrage.
  • nginx -T (majuscule) vide la configuration résolue complète, y compris tous les fichiers inclus — utilisez-le avant des modifications importantes pour vérifier la configuration effective.
  • Les environnements de panneau de contrôle ont leurs propres scripts de redémarrage. L’utilisation de commandes systemd brutes dans cPanel ou Plesk peut provoquer des incohérences d’état.
  • Surveillez /var/log/nginx/error.log en continu lors de tout déploiement de configuration. Les erreurs en amont et les problèmes de permissions apparaissent ici, pas dans systemctl status.

Foire aux questions

Quelle est la différence entre nginx restart et nginx reload ?

restart termine le processus maître et tous les workers, abandonnant les connexions actives, puis redémarre à zéro. reload envoie SIGHUP au maître, qui génère de nouveaux workers avec la configuration mise à jour pendant que les anciens workers finissent de servir les requêtes existantes — résultant en zéro interruption.

Pourquoi sudo systemctl restart nginx échoue-t-il même si nginx -t réussit ?

Un test de configuration réussi ne garantit pas un démarrage réussi. Les causes courantes incluent les conflits de port (un autre processus déjà lié au port 80 ou 443), les fichiers de certificat SSL manquants référencés dans la configuration, ou des limites de descripteurs de fichiers insuffisantes. Vérifiez journalctl -u nginx immédiatement après l’échec pour l’erreur spécifique.

Comment appliquer un changement de configuration sans aucune interruption ?

Exécutez sudo nginx -t pour valider, puis sudo systemctl reload nginx. Cela effectue un remplacement progressif des workers en place. Les connexions existantes ne sont pas interrompues.

Comment faire démarrer Nginx automatiquement après un redémarrage du serveur ?

Exécutez sudo systemctl enable nginx. Cela crée un lien symbolique dans le répertoire cible systemd approprié. Combinez-le avec sudo systemctl start nginx ou utilisez sudo systemctl enable --now nginx pour activer et démarrer en une seule commande.

Où se trouvent les journaux Nginx et comment les lire en temps réel ?

Par défaut, le journal d’erreurs se trouve à /var/log/nginx/error.log et le journal d’accès à /var/log/nginx/access.log. Suivez l’un ou l’autre en temps réel avec sudo tail -f /var/log/nginx/error.log. Pour une visualisation structurée des journaux avec horodatages et filtrage par sévérité, utilisez sudo journalctl -u nginx -f.

15%

Économisez 15% sur tous les services d'hébergement

Testez vos compétences et obtenez Réduction sur tout plan d'hébergement

Utilisez le code :

Skills
Commencer