Introduction
Quand Nginx cesse d'acheminer le trafic comme prévu, la cause se cache souvent dans la couche réseau : une résolution DNS qui ne fonctionne plus, un port déjà occupé, une règle de pare-feu qui bloque silencieusement les paquets, ou une route qui pointe dans la mauvaise direction. Trouver laquelle est en cause peut ressembler à un jeu de devinettes, sauf si vous travaillez méthodiquement à travers la pile.
Ce guide vous propose un flux de travail pratique de dépannage réseau Nginx. Il s'articule autour de trois phases : dresser un inventaire propre de votre environnement, apporter des modifications en toute sécurité avec une voie de retour en arrière, et vérifier chaque changement avec des commandes concrètes avant de poursuivre. Chaque étape comprend la commande exacte à exécuter, l'aspect d'une sortie normale, et comment récupérer si quelque chose se passe mal.
Nous utiliserons comme exemple fil rouge une configuration typique de proxy inverse : un client atteint Nginx sur l'hôte A (IP 192.168.1.100) écoutant sur les ports 80 et 443, et Nginx transmet les requêtes à une application dorsale sur l'hôte B (IP 10.0.0.5) écoutant sur le port 8080. Adaptez les adresses IP et les ports à votre propre environnement au fil de votre lecture.
Inventaire de version et d'environnement
Avant de modifier quoi que ce soit, sachez exactement avec quoi vous travaillez. Cela vous évite de courir après un problème qui est en réalité causé par une ancienne version de Nginx ou un module qui n'a jamais été compilé.
Vérifier la version de Nginx et les options de compilation
Exécutez cette commande pour voir la version de Nginx et les arguments de configuration utilisés lors de la compilation :
nginx -V
La sortie attendue est verbeuse, mais les lignes clés ressemblent à ceci :
nginx version: nginx/1.18.0
built by gcc 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04)
built with OpenSSL 1.1.1f 31 Mar 2020
TLS SNI support enabled
configure arguments: --with-http_ssl_module --with-stream --with-stream_ssl_module ...
Le drapeau --with-stream est important si vous dépannez le proxy TCP ou UDP. Si vous avez besoin du support de flux et qu'il manque, vous devrez installer un paquet différent (comme nginx-full sur Debian/Ubuntu) ou recompiler Nginx vous-même. Ne perdez pas de temps à déboguer une configuration de flux que le binaire ne peut même pas analyser.
Identifier la topologie réseau
Dessinez un schéma simple de votre configuration, même juste sur un tableau blanc. Pour notre exemple, la topologie est :
Client -> Nginx (hôte A, 192.168.1.100:80/443) -> Application dorsale (hôte B, 10.0.0.5:8080)
Confirmez ensuite les adresses IP et les interfaces sur l'hôte Nginx avec :
ip addr show
Extrait de sortie pertinent :
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic eth0
valid_lft 86366sec preferred_lft 86366sec
Notez le nom de l'interface (eth0), l'adresse IP (192.168.1.100) et le masque de sous-réseau (/24). Vous en aurez besoin lors de la vérification des routes et des règles de pare-feu plus tard.
Vérifier les ports en écoute
Utilisez ss pour voir sur quels ports Nginx écoute actuellement. Cela révèle souvent immédiatement un conflit de port ou une directive listen mal configurée.
sudo ss -tulpn | grep nginx
Exemple de sortie attendue pour un serveur HTTP par défaut :
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=1234,fd=6))
tcp LISTEN 0 511 [::]:80 [::]:* users:(("nginx",pid=1234,fd=7))
Si vous ne voyez rien, Nginx n'est soit pas en cours d'exécution, soit configuré pour écouter sur un port différent de celui attendu. Vérifiez systemctl status nginx et vos directives listen.
Chemin de configuration sécurisé
Ne modifiez jamais directement le fichier nginx.conf principal lorsque vous faites des essais. Utilisez plutôt un fichier de configuration séparé que vous pouvez ajouter et supprimer sans toucher à la configuration fonctionnelle.
Utiliser un fichier de configuration séparé pour tester
Créez un nouveau fichier dans le répertoire conf.d avec un bloc serveur minimal qui ne change que le port listen pour quelque chose de sûr, comme 8081. Cela vous permet de tester si le problème est spécifique à un certain port ou à une liaison.
Exemple de fichier /etc/nginx/conf.d/test-networking.conf :
server {
listen 8081;
server_name localhost;
location / {
return 200 "Test OK";
}
}
Testez la configuration avant de l'appliquer :
nginx -t
Sortie attendue :
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
Si le test réussit, rechargez Nginx avec élégance. Cela ne coupe pas les connexions existantes, donc le trafic de production n'est pas affecté.
sudo nginx -s reload
Vérifiez que le nouveau port est en écoute :
sudo ss -tulpn | grep 8081
Sortie attendue :
tcp LISTEN 0 511 0.0.0.0:8081 0.0.0.0:* users:(("nginx",pid=5678,fd=8))
Pour revenir en arrière, supprimez le fichier de test et rechargez à nouveau :
sudo rm /etc/nginx/conf.d/test-networking.conf
sudo nginx -s reload
Modifier la configuration de résolution DNS en toute sécurité
Si vous soupçonnez des problèmes DNS, ne modifiez pas tout de suite le fichier /etc/resolv.conf sur tout le serveur. Testez plutôt un autre serveur DNS uniquement pour Nginx en ajoutant une directive resolver dans un bloc server ou location spécifique.
Par exemple, pour tester si Google Public DNS (8.8.8.8) résout correctement le nom d'hôte de votre serveur amont, ajoutez ceci à votre bloc serveur de test :
resolver 8.8.8.8 valid=30s;
Ajoutez ensuite une location qui proxifie vers votre dorsale en utilisant une variable afin que Nginx résolve à nouveau au moment de l'exécution :
set $backend "backend.example.com";
location / {
proxy_pass http://$backend;
}
Testez, rechargez, puis faites une requête. Si la requête réussit avec le nouveau résolveur mais échouait avant, votre DNS système était le problème. Si elle échoue toujours, vérifiez la connectivité vers le serveur DNS lui-même (ping 8.8.8.8) et la réponse avec dig @8.8.8.8 backend.example.com.
Tester les règles de pare-feu de manière incrémentale
Lors de l'ouverture d'un nouveau port, faites-le de manière contrôlée afin de pouvoir supprimer rapidement la règle si elle cause des problèmes. Sur un hôte utilisant iptables, insérez une règle ACCEPT temporaire pour le port de test :
sudo iptables -I INPUT -p tcp --dport 8081 -j ACCEPT
Après le test, supprimez la règle en la répétant avec -D :
sudo iptables -D INPUT -p tcp --dport 8081 -j ACCEPT
Listez toujours les règles actuelles avec les compteurs de paquets avant et après pour confirmer le changement et détecter les doublons :
sudo iptables -L -n -v
Extrait attendu après l'ajout de la règle temporaire :
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8081
Vérification et diagnostics
Une fois que vous avez apporté un changement, vérifiez qu'il fonctionne de l'intérieur vers l'extérieur. Commencez par la connectivité locale, puis le DNS, puis l'inspection au niveau des paquets.
Vérifier la connectivité de base avec curl
Utilisez curl avec l'option -v pour voir la requête et la réponse complètes, y compris les détails de connexion.
curl -v http://localhost:8081/
Sortie attendue (partielle) :
* Trying 127.0.0.1:8081...
* Connected to localhost (127.0.0.1) port 8081 (#0)
> GET / HTTP/1.1
> Host: localhost:8081
> User-Agent: curl/7.68.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: nginx/1.18.0
< Content-Type: text/plain
< Content-Length: 7
<
Test OK
Si la connexion échoue, lisez attentivement le message d'erreur :
Connection refused: Nginx n'écoute pas sur ce port, ou un pare-feu rejette activement la connexion avec un RST TCP.Connection timed out: L'hôte est injoignable, ou un pare-feu bloque silencieusement les paquets (aucune réponse du tout).Could not resolve host: La résolution DNS a échoué pour le nom que vous avez utilisé dans l'URL.
Tester la résolution DNS
Si votre configuration Nginx utilise un nom d'hôte dans proxy_pass sans variable, Nginx résout ce nom une fois au démarrage. Un échec DNS empêche alors Nginx de démarrer. Testez la résolution indépendamment avec dig :
dig +short backend.example.com
Sortie attendue si elle résout :
10.0.0.5
Si vous n'obtenez aucune sortie, vérifiez /etc/resolv.conf pour les serveurs DNS système et assurez-vous qu'ils sont joignables :
cat /etc/resolv.conf
Exemple de sortie :
nameserver 192.168.1.1
Testez ensuite le serveur directement :
dig @192.168.1.1 backend.example.com
Si cela échoue, le serveur DNS est en panne ou ne peut pas résoudre le nom. Pour les environnements DNS dynamiques, utilisez la directive resolver avec un paramètre valid comme montré précédemment pour que Nginx résolve à nouveau au moment de l'exécution.
Utiliser tcpdump pour capturer le trafic
Lorsque les vérifications de haut niveau ne sont pas concluantes, capturez les paquets pour voir exactement ce qui se passe sur le câble. Exécutez tcpdump sur l'hôte Nginx et filtrez sur votre port de test :
sudo tcpdump -i any -s 0 -A 'tcp port 80'
Dans un autre terminal, faites une requête avec curl http://localhost/. Vous devriez voir la poignée de main TCP en trois étapes (SYN, SYN-ACK, ACK) suivie de la requête et de la réponse HTTP.
Extrait de sortie tcpdump attendu :
12:34:56.789012 IP client.54321 > server.http: Flags [S], seq 123456789, win 64240, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
12:34:56.789123 IP server.http > client.54321: Flags [S.], seq 987654321, ack 123456790, win 65160, options [mss 1460,nop,nop,sackOK,nop,wscale 7], length 0
12:34:56.789234 IP client.54321 > server.http: Flags [.], ack 1, win 502, length 0
Si vous ne voyez que des paquets SYN sans aucune réponse SYN-ACK, le serveur ne répond pas sur ce port. Cela indique que Nginx n'écoute pas (vérifiez ss), qu'un pare-feu bloque le SYN, ou que le paquet n'arrive jamais en raison d'un problème de routage.
Vérifier les règles de routage et de pare-feu
Assurez-vous que la route vers la destination est correcte. Pour les connexions sortantes de Nginx vers un serveur amont, vérifiez la table de routage :
ip route show
Exemple de sortie attendue pour notre configuration :
default via 192.168.1.1 dev eth0 proto dhcp metric 100
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100 metric 100
La route par défaut passe par 192.168.1.1, qui devrait être votre passerelle. Pour une dorsale sur 10.0.0.0/24, vous auriez besoin d'une route spécifique ou d'un VPN/tunnel. Utilisez ip route get 10.0.0.5 pour voir quelle interface et quelle passerelle seraient utilisées pour cette IP.
Pour les règles de pare-feu, listez-les avec les compteurs de paquets pour voir si certaines sont touchées :
sudo iptables -L -n -v
Cherchez les règles DROP ou REJECT qui affectent votre port ou source/destination. Des compteurs de paquets qui augmentent lorsque vous faites une requête de test indiquent que la règle est en correspondance.
Inspecter les journaux d'erreurs Nginx
Nginx journalise les erreurs détaillées dans /var/log/nginx/error.log par défaut. Augmentez temporairement le niveau de journalisation à debug si le niveau par défaut error ne donne pas assez de détails. Ajoutez ceci en haut de nginx.conf dans le bloc http (ou globalement) :
error_log /var/log/nginx/error.log debug;
Rechargez Nginx, reproduisez le problème et examinez le journal. Un échec DNS peut apparaître ainsi :
[error] 1234#1234: *1 backend.example.com could not be resolved (110: Operation timed out), client: 192.168.1.10, server: localhost, request: "GET / HTTP/1.1", host: "backend.example.com"
N'oubliez pas de remettre le niveau de journalisation à error ou warn une fois terminé pour éviter de remplir le disque :
error_log /var/log/nginx/error.log error;
Puis rechargez à nouveau.
Modes d'échec et récupération
Même avec des tests minutieux, les changements peuvent casser des choses. Voici les échecs les plus courants et comment récupérer rapidement.
Échec du démarrage de Nginx après une modification de configuration
Si nginx -t réussit mais que Nginx ne démarre toujours pas, vérifiez le journal d'erreurs pour les erreurs de démarrage. Causes courantes :
- Port déjà utilisé : un autre processus est lié au port
listen. Utilisezsudo ss -tulpn | grep <port>pour trouver le PID etps -p <PID> -o comm=pour l'identifier. - Permission refusée : écouter sur un port inférieur à 1024 nécessite root ou
CAP_NET_BIND_SERVICE. Si vous exécutez Nginx en tant qu'utilisateur non root, vous pouvez accorder la capacité avecsudo setcap 'cap_net_bind_service=+ep' /usr/sbin/nginx. - Directive invalide qui n'échoue qu'à l'exécution : certaines directives sont syntaxiquement valides mais échouent lorsque Nginx essaie de les appliquer (par exemple, un
proxy_passvers un socket UNIX inexistant).
Récupération : Revenez à la configuration connue comme étant fonctionnelle. Gardez toujours une sauvegarde horodatée avant de modifier :
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak-$(date +%Y%m%d)
Si nécessaire, restaurez-la :
sudo cp /etc/nginx/nginx.conf.bak-20240315 /etc/nginx/nginx.conf
sudo nginx -t && sudo systemctl start nginx
Vérifiez ensuite systemctl status nginx pour confirmer que le processus est en cours d'exécution.
Échec de résolution DNS amont
Si Nginx ne peut pas résoudre un nom d'hôte amont au démarrage (lorsque proxy_pass utilise un nom d'hôte littéral sans variable), il ne démarrera pas. Pour éviter cela, utilisez une IP statique dans proxy_pass, ou utilisez une variable combinée à une directive resolver pour permettre la résolution au moment de l'exécution et une erreur 502 élégante si le DNS échoue :
resolver 8.8.8.8;
set $backend "backend.example.com";
location / {
proxy_pass http://$backend;
}
Avec cette configuration, si le DNS échoue au moment de la requête, Nginx renvoie 502 Bad Gateway au lieu de planter. Vous pouvez alors corriger le problème DNS (vérifiez dig, ajustez /etc/resolv.conf ou l'IP du résolveur) et recharger.
Récupération : Vérifiez le DNS avec dig +short backend.example.com, corrigez la configuration du résolveur et rechargez Nginx.
Le pare-feu bloque le trafic de manière inattendue
Si vous ajoutez une règle de pare-feu qui bloque un trafic légitime, supprimez-la rapidement. Listez les règles avec des numéros de ligne :
sudo iptables -L INPUT --line-numbers
Extrait de sortie :
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
2 DROP tcp -- anywhere anywhere tcp dpt:80
Supprimez la règle DROP sur la ligne 2 :
sudo iptables -D INPUT 2
Si vous utilisez iptables-persistent ou un outil similaire, n'oubliez pas de sauvegarder les règles actuelles après correction afin qu'un redémarrage ne restaure pas la mauvaise règle :
sudo netfilter-persistent save
Mauvaise configuration de l'interface réseau
Si l'interface réseau est désactivée ou mal configurée, Nginx peut s'exécuter mais ne pas être joignable depuis le réseau. Vérifiez l'état de l'interface :
ip link show eth0
Sortie attendue si l'interface est active :
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
link/ether 52:54:00:12:34:56 brd ff:ff:ff:ff:ff:ff
Si l'état est DOWN, activez-la :
sudo ip link set eth0 up
Vérifiez ensuite que l'adresse IP a été restaurée avec ip addr show eth0. Si l'IP manque, l'interface peut être configurée pour DHCP ; vérifiez sudo dhclient -v eth0 ou votre gestionnaire de réseau.
Pièges courants et comment les éviter
Même les administrateurs expérimentés trébuchent sur ces problèmes récurrents. Les connaître à l'avance fait gagner du temps.
1. Oublier de tester la configuration avant de recharger
Pourquoi cela arrive : Vous êtes pressé, vous faites une modification rapide et vous lancez nginx -s reload sans nginx -t.
Comment l'éviter : Exécutez toujours nginx -t d'abord. Faites-en une habitude réflexe. La commande prend moins d'une seconde et détecte 90 % des erreurs de syntaxe.
Récupération : Si vous avez déjà rechargé et que Nginx ne parvient plus à servir le trafic, les anciens processus worker peuvent encore être en cours d'exécution. Vérifiez ps aux | grep nginx et, si nécessaire, redémarrez le service avec systemctl restart nginx après avoir corrigé la configuration.
2. Modifier le mauvais fichier de configuration
Pourquoi cela arrive : Plusieurs fichiers de configuration dans conf.d/ ou sites-enabled/ avec des noms similaires, ou vous modifiez le nginx.conf principal mais le bloc serveur réel est dans un fichier inclus.
Comment l'éviter : Utilisez nginx -T pour vider la configuration effective complète et confirmer quel fichier contient la directive que vous modifiez. Gardez tous vos blocs serveur dans des fichiers clairement nommés.
Récupération : Annulez la modification accidentelle en restaurant une sauvegarde de ce fichier, ou utilisez un contrôle de version (git) pour /etc/nginx/ afin de revenir en arrière.
3. Utiliser resolver avec un serveur DNS qui n'est pas joignable depuis l'hôte Nginx
Pourquoi cela arrive : Vous copiez une directive resolver 8.8.8.8; depuis un guide en ligne, mais votre pare-feu bloque le DNS sortant vers des serveurs externes, ou vous êtes dans un réseau isolé.
Comment l'éviter : Testez d'abord la joignabilité du serveur DNS avec dig @8.8.8.8 example.com. Utilisez des serveurs DNS internes si disponibles, et définissez toujours un paramètre valid pour éviter de surcharger un résolveur lent.
Récupération : Changez le resolver pour un serveur joignable (par exemple, votre passerelle 192.168.1.1), testez et rechargez.
4. Modifier les règles de pare-feu sans plan de retour en arrière
Pourquoi cela arrive : Vous ajoutez une règle DROP pour bloquer un port, puis vous fermez la session SSH ou vous vous retrouvez verrouillé parce que vous avez aussi bloqué le port 22.
Comment l'éviter : Pour les serveurs distants, planifiez toujours une réinitialisation du pare-feu comme filet de sécurité. Par exemple, exécutez sudo iptables -P INPUT ACCEPT; sudo iptables -F ou utilisez un outil comme ufw avec sudo ufw reset. Mieux encore, utilisez un outil de gestion de configuration avec retour en arrière automatique. Au minimum, testez les changements depuis un second terminal ou une console.
Récupération : Si verrouillé, utilisez un accès console hors bande (console du fournisseur cloud, IPMI) pour réinitialiser le pare-feu, ou redémarrez le serveur si les règles ne sont pas persistantes.
5. Ignorer les journaux d'erreurs Nginx pendant le dépannage
Pourquoi cela arrive : Le journal d'erreurs peut être verbeux, et vous pouvez être concentré sur les tests au niveau réseau.
Comment l'éviter : Lancez tail -f /var/log/nginx/error.log dans un terminal séparé pendant que vous reproduisez le problème. Le journal contient souvent la raison exacte (par exemple, connect() failed (111: Connection refused) while connecting to upstream).
Récupération : Si vous ne voyez pas assez de détails, activez temporairement la journalisation de débogage comme décrit précédemment, reproduisez, puis revenez en arrière.
6. Supposer que le rechargement de Nginx applique tous les changements
Pourquoi cela arrive : Certains changements nécessitent un redémarrage complet (par exemple, modifier la directive user ou le paramètre worker_processes).
Comment l'éviter : Sachez quelles directives sont rechargeables. Nginx journalise un avertissement lorsque vous essayez de recharger un changement non rechargeable, mais il peut laisser l'ancien comportement en place. En cas de doute, effectuez un systemctl restart nginx complet pendant une fenêtre de maintenance.
Récupération : Si un rechargement n'a pas pris en compte votre changement, redémarrez Nginx et vérifiez avec nginx -T | grep <directive>.
Liste de contrôle des opérations
Utilisez cette liste de contrôle pour les vérifications de santé réseau Nginx de routine et avant/après tout changement de configuration. Attribuez un responsable unique (par exemple, l'ingénieur d'astreinte ou la personne qui effectue le changement) et passez en revue les résultats chaque semaine ou après chaque changement.
- Vérification de version : Exécutez
nginx -Vet notez les options de compilation. Responsable : ingénieur effectuant le changement. Fréquence : avant tout changement majeur ou trimestriellement. - Sauvegarde de configuration : Avant de modifier, copiez
nginx.confet tous les fichiers inclus vers une sauvegarde horodatée (par exemple,cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak-$(date +%Y%m%d)). Responsable : celui qui modifie la configuration. Fréquence : à chaque modification. - Test de syntaxe : Exécutez toujours
nginx -taprès tout changement de configuration. Responsable : idem ci-dessus. Fréquence : à chaque modification. - Rechargement élégant : Utilisez
nginx -s reloadousystemctl reload nginxpour appliquer les changements sans couper les connexions. Responsable : idem ci-dessus. Fréquence : après un test réussi. - Vérification des ports : Après rechargement, vérifiez les ports en écoute avec
sudo ss -tulpn | grep nginx. Responsable : idem ci-dessus. Fréquence : après chaque rechargement. - Test de connectivité : Utilisez
curl -I http://localhostdepuis le serveur lui-même pour tester la réponse locale. Responsable : ingénieur d'astreinte. Fréquence : après chaque changement, ou dans le cadre des vérifications de santé. - Test externe : Depuis une autre machine, utilisez
curl -I http://server-ippour tester l'accessibilité externe. Responsable : ingénieur d'astreinte. Fréquence : après des changements de pare-feu ou de réseau. - Examen des journaux : Vérifiez
/var/log/nginx/error.logpour toute nouvelle erreur après les changements. Responsable : ingénieur d'astreinte. Fréquence : après chaque changement et pendant la réponse aux incidents. - Audit du pare-feu : Passez périodiquement en revue les règles de pare-feu avec
sudo iptables -L -n -vpour vous assurer qu'il n'y a pas de blocages involontaires. Responsable : équipe sécurité ou infrastructure. Fréquence : mensuellement ou après tout changement de pare-feu. - Santé DNS : Si vous utilisez des noms d'hôte, vérifiez qu'ils résolvent avec
dig +short hostnameet envisagez d'utiliser une directiveresolveravec un repli. Responsable : équipe infrastructure. Fréquence : hebdomadairement ou lors de changements DNS.
Voici un tableau de référence concis pour les symptômes courants et les premières commandes à exécuter :
| Symptôme | Première commande à exécuter | Résultat normal attendu |
|---|---|---|
| Connection refused | sudo ss -tulpn | grep nginx | Nginx écoute sur le port attendu |
| 502 Bad Gateway | tail -f /var/log/nginx/error.log | Pas d'erreurs de connexion amont |
| Échec DNS | dig +short upstream.example.com | Adresse IP renvoyée |
| Connection timeout | sudo tcpdump -i any -s 0 'tcp port 80' | Paquets SYN et SYN-ACK visibles |
| Permission refusée sur le port 80 | sudo setcap 'cap_net_bind_service=+ep' /usr/sbin/nginx | Pas d'erreur au démarrage |
| Problème de routage | ip route get 10.0.0.5 | Interface et passerelle correctes |
Conclusion
Le dépannage systématique des problèmes réseau Nginx ne consiste pas à mémoriser chaque commande ; il s'agit de suivre un processus reproductible. Commencez par un inventaire propre des versions, des interfaces et des ports. Apportez des modifications de manière incrémentale dans un fichier de configuration séparé avec nginx -t et des rechargements élégants. Vérifiez chaque changement avec curl, ss, dig et tcpdump si nécessaire. Et ayez toujours une voie de retour en arrière : sauvegardes, règles de pare-feu réversibles et étapes de récupération documentées.
Les pièges les plus courants que nous avons couverts—sauter les tests de configuration, modifier le mauvais fichier, résolveurs injoignables, changements de pare-feu risqués et ignorer les journaux d'erreurs—sont tous évitables avec un peu de discipline. Ajoutez la liste de contrôle des opérations au runbook de votre équipe et attribuez des responsables clairs afin que rien ne passe à travers les mailles du filet.
Commencez par un changement pilote étroit et mesurable, comme ajouter un serveur de test sur le port 8081 ou introduire une directive resolver. Inspectez le résultat localement, puis étendez à la production. En pratiquant ces étapes, vous réduirez les retouches, raccourcirez les temps de réponse aux incidents et garderez votre infrastructure Nginx stable. La prochaine fois qu'un problème réseau apparaîtra, vous saurez exactement où chercher en premier.