Dépannage des erreurs courantes de Nginx : Un guide pratique

Vous rencontrez des erreurs Nginx ? Ce guide pratique vous aide à diagnostiquer et à résoudre les problèmes courants. Apprenez à gérer les problèmes de configuration, les erreurs de permission refusée, les connexions refusées, les erreurs de passerelle 502/504, et bien plus encore. Nous fournissons des explications claires, des solutions concrètes et des commandes Nginx essentielles pour que votre site reste accessible et fonctionne sans problème.

62 vues

Dépannage des erreurs courantes Nginx : Un guide pratique

Nginx est un serveur web puissant et polyvalent, mais comme tout logiciel complexe, il peut parfois présenter des défis. Rencontrer des erreurs peut être frustrant, surtout lorsqu'elles affectent la disponibilité de votre site. Ce guide propose une approche pratique pour diagnostiquer et résoudre certaines des erreurs Nginx les plus courantes, couvrant les problèmes de configuration, les problèmes de permissions, les délais d'attente et les erreurs liées au client. En comprenant ces pièges courants et en apprenant à les résoudre, vous pouvez vous assurer que votre serveur Nginx fonctionne sans problème et que votre site web reste accessible aux utilisateurs.

Cet article vise à vous doter des connaissances et des outils nécessaires pour dépanner efficacement Nginx. Nous passerons en revue des scénarios d'erreurs typiques, expliquerons leurs causes sous-jacentes et offrirons des solutions concrètes avec des exemples illustratifs. Que vous soyez un débutant ou un administrateur Nginx expérimenté, ce guide vous sera une ressource précieuse pour maintenir votre serveur web dans un état optimal.

Catégories d'erreurs Nginx courantes

Les erreurs Nginx peuvent être globalement classées en fonction de leur cause profonde. Comprendre ces catégories aide à restreindre la zone du problème.

  • Erreurs de configuration : Erreurs dans nginx.conf ou les fichiers de configuration inclus. Ce sont souvent les coupables les plus fréquents.
  • Erreurs de permission : Les processus worker Nginx ne disposent pas des permissions nécessaires pour accéder aux fichiers ou aux répertoires.
  • Erreurs de délai d'attente : Problèmes liés au serveur ne répondant pas dans les délais prévus, souvent dus à des problèmes d'application backend ou à la latence du réseau.
  • Erreurs client : Problèmes provenant du côté client, mais parfois mal interprétés comme des problèmes côté serveur.
  • Erreurs de ressources : Le serveur manque de ressources comme la mémoire, le CPU ou les descripteurs de fichiers.

Diagnostiquer les erreurs Nginx

La première étape du dépannage est d'identifier le message d'erreur et son emplacement. Les journaux Nginx sont votre principale source d'information.

Vérification des journaux Nginx

Nginx enregistre généralement les erreurs dans deux fichiers principaux :

  • Journal d'erreurs (error.log) : C'est là que Nginx enregistre toutes les erreurs et avertissements. Son emplacement par défaut est généralement /var/log/nginx/error.log sur les systèmes Linux.
  • Journal d'accès (access.log) : Bien que principalement destiné au suivi des requêtes, ce journal peut parfois fournir un contexte aux erreurs, en particulier les codes de statut HTTP.

Pour afficher les dernières entrées du journal d'erreurs, vous pouvez utiliser la commande tail :

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

Cette commande diffusera le fichier journal en temps réel, vous permettant de voir les erreurs au fur et à mesure qu'elles se produisent.

Validation de la configuration Nginx

Avant de redémarrer Nginx après avoir effectué des modifications de configuration, il est crucial de tester la configuration pour les erreurs de syntaxe :

sudo nginx -t

Cette commande vérifie les fichiers de configuration et signale toute erreur de syntaxe trouvée, ainsi que le numéro de ligne où l'erreur s'est produite. Si le test est réussi, il affichera :

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

Erreurs Nginx courantes et solutions

Plongeons dans des scénarios d'erreurs spécifiques et leurs remèdes.

1. Erreurs (13: Permission denied)

Cette erreur apparaît couramment dans error.log lorsque le processus worker Nginx n'a pas la permission de lire les fichiers ou d'accéder aux répertoires qu'il est censé servir.

Cause : La directive user dans nginx.conf (souvent www-data ou nginx) n'a pas les permissions de lecture pour le répertoire racine web ou les fichiers qu'il contient.

Solution : Assurez-vous que l'utilisateur Nginx dispose des permissions de lecture appropriées pour votre répertoire de contenu web. Vous pouvez y parvenir en utilisant les commandes chown et chmod.

Exemple :

Si votre racine web est /var/www/html et que l'utilisateur Nginx est www-data :

# Give ownership to the nginx user and group
sudo chown -R www-data:www-data /var/www/html

# Ensure directories are executable and files are readable
sudo find /var/www/html -type d -exec chmod 755 {} \;
sudo find /var/www/html -type f -exec chmod 644 {} \;

Astuce : Si vous servez des fichiers statiques et devez empêcher l'accès direct à certains répertoires, assurez-vous que l'utilisateur Nginx dispose des permissions d'exécution sur les répertoires pour les traverser, mais pas nécessairement des permissions de lecture sur le contenu des répertoires s'ils ne sont pas destinés à être listés.

2. Erreurs (111: Connection refused)

Cette erreur signifie que le serveur Nginx a tenté de se connecter à un autre service (par exemple, un serveur d'application backend comme Node.js, Python/Gunicorn ou PHP-FPM) mais que la connexion a été activement refusée par la cible.

Cause : Le service de l'application backend ne fonctionne pas, écoute sur un port ou une adresse IP différente de celle attendue par Nginx, ou un pare-feu bloque la connexion.

Solution :

  • Vérifier le statut du service backend : Assurez-vous que votre serveur d'application (par exemple, Gunicorn, Node.js, PHP-FPM) est en cours d'exécution.
    • Pour les services systemd : sudo systemctl status <service_name> (par exemple, php8.1-fpm, gunicorn).
    • Pour les autres processus : ps aux | grep <process_name>.
  • Vérifier l'adresse/port d'écoute : Confirmez que le service backend écoute sur l'adresse IP et le port spécifiés dans vos directives Nginx proxy_pass ou fastcgi_pass.
    bash # Example: check if Node.js is listening on port 3000 sudo ss -tulnp | grep 3000
  • Règles de pare-feu : Assurez-vous qu'aucun pare-feu ne bloque la connexion entre Nginx et le service backend.

Extrait d'exemple de configuration Nginx :

location / {
    proxy_pass http://127.0.0.1:3000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

Dans ce cas, assurez-vous que votre application est en cours d'exécution et écoute sur http://127.0.0.1:3000.

3. Erreurs 502 Bad Gateway

L'erreur 502 Bad Gateway signifie que Nginx a agi comme une passerelle ou un proxy et a reçu une réponse invalide du serveur amont.

Cause : Similaire à Connection refused, mais le serveur amont est joignable mais a renvoyé une réponse invalide ou incomplète. Cela pourrait être dû à :
* L'application backend qui plante ou rencontre une erreur interne.
* L'application backend prenant trop de temps à répondre.
* Problèmes réseau entre Nginx et l'amont.
* Configuration incorrecte de proxy_pass ou fastcgi_pass.

Solution :

  • Vérifier les journaux de l'application backend : Examinez les journaux de votre application backend pour toute erreur ou exception. C'est souvent le moyen le plus direct de trouver la cause racine.
  • Augmenter les délais d'attente : Si l'application effectue une opération longue, vous devrez peut-être augmenter les valeurs de délai d'attente de Nginx.
    nginx proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; fastcgi_send_timeout 60s; fastcgi_read_timeout 60s;
    Ajustez ces valeurs avec précaution, car des délais d'attente excessivement longs peuvent bloquer les processus worker.
  • Vérifier la configuration amont : Vérifiez à nouveau les directives proxy_pass ou fastcgi_pass pour leur exactitude.

4. Erreurs 413 Request Entity Too Large

Cette erreur se produit lorsque le client envoie un corps de requête qui dépasse la limite de taille configurée dans Nginx.

Cause : Un client tente de télécharger un fichier ou d'envoyer des données dont la taille est supérieure à celle que Nginx est configuré pour accepter.

Solution : Ajustez la directive client_max_body_size dans votre configuration Nginx. Cette directive est généralement définie dans les blocs http, server ou location.

Exemple :

Pour autoriser des requêtes jusqu'à 100 Mo :

http {
    # ... other http configurations ...
    client_max_body_size 100M;
}

N'oubliez pas d'exécuter sudo nginx -t et de recharger Nginx (sudo systemctl reload nginx) après avoir effectué des modifications.

5. Erreurs 403 Forbidden

Une erreur 403 Forbidden signifie que le serveur a compris la requête mais refuse de l'autoriser. Pour les fichiers statiques, cela signifie généralement que Nginx n'a pas la permission d'accéder au fichier ou au répertoire demandé.

Cause : Similaire aux erreurs Permission denied, mais se traduit spécifiquement par un code de statut HTTP 403. Cela peut également se produire si la liste des répertoires est désactivée et qu'aucun fichier index n'est trouvé.

Solution :

  • Vérifier les permissions des fichiers : Assurez-vous que l'utilisateur Nginx dispose des permissions de lecture pour le fichier demandé et des permissions d'exécution pour tous les répertoires parents y menant. Reportez-vous aux solutions pour les erreurs (13: Permission denied).
  • Vérifier la directive index : Si un répertoire est demandé (par exemple, http://example.com/some/directory/), Nginx recherche un fichier index (comme index.html ou index.php). Si aucun fichier index n'existe et que la liste des répertoires est désactivée, une erreur 403 Forbidden se produira.
    nginx location / { root /var/www/html; index index.html index.htm; }
  • Vérifier la directive autoindex : Si vous avez l'intention d'autoriser les listes de répertoires, assurez-vous que autoindex on; est défini. Cependant, ce n'est généralement pas recommandé pour des raisons de sécurité.

6. Erreurs 504 Gateway Timeout

Cela indique que Nginx, agissant comme une passerelle, n'a pas reçu de réponse en temps voulu du serveur amont.

Cause : L'application amont a mis trop de temps à traiter la requête, dépassant les limites de délai d'attente configurées dans Nginx. C'est très similaire à 502 Bad Gateway, mais met spécifiquement en évidence un délai d'attente.

Solution :

  • Augmenter les délais d'attente Nginx : Comme pour les erreurs 502, augmenter proxy_read_timeout, proxy_send_timeout et fastcgi_read_timeout peut aider.
  • Optimiser l'application backend : La solution à long terme la plus efficace est d'optimiser les performances de votre application backend pour qu'elle réponde plus rapidement.
  • Vérifier les journaux backend : Recherchez les processus de longue durée ou les erreurs dans les journaux de votre application.

7. Erreurs SSL/TLS

Les erreurs liées aux certificats SSL peuvent empêcher les utilisateurs d'accéder à votre site de manière sécurisée.

Cause : Chemins de certificat incorrects, certificats expirés, noms de domaine non correspondants ou configuration incorrecte des directives SSL.

Solution :

  • Vérifier les chemins des certificats : Assurez-vous que les directives ssl_certificate et ssl_certificate_key pointent vers les fichiers corrects et existants.
    nginx ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
  • Vérifier l'expiration du certificat : Utilisez des outils comme openssl ou vérifiez le tableau de bord de votre fournisseur de certificat pour vous assurer que les certificats ne sont pas expirés.
    bash openssl x509 -in /path/to/your/certificate.pem -noout -dates
  • Assurer la correspondance du domaine : Vérifiez que les noms alternatifs du sujet (SANs) ou le nom commun (CN) du certificat incluent le nom de domaine auquel les utilisateurs accèdent.
  • Vérifier ssl_protocols et ssl_ciphers : Assurez-vous d'utiliser des protocoles et des suites de chiffrement modernes et sécurisés.

Erreurs côté client

Bien que Nginx soit un serveur, certains comportements ou configurations côté client peuvent se manifester comme des problèmes qui pourraient sembler liés au serveur.

  • ERR_CONNECTION_RESET : Indique souvent un problème réseau entre le client et le serveur, ou un pare-feu à l'une ou l'autre extrémité fermant agressivement la connexion. Cela peut également indiquer que l'application serveur plante et ferme brusquement la connexion.
  • 400 Bad Request : Signifie généralement que le client a envoyé une requête que le serveur n'a pas pu comprendre (par exemple, des en-têtes mal formés). C'est moins courant avec les navigateurs standards, mais peut se produire avec des clients personnalisés ou des robots.

Bonnes pratiques pour minimiser les erreurs

  • Gestion de la configuration : Utilisez un système de contrôle de version pour vos fichiers de configuration Nginx. Testez minutieusement les configurations avant de les déployer (nginx -t).
  • Journalisation : Configurez une journalisation complète et examinez régulièrement votre error.log pour détecter toute anomalie.
  • Surveillance : Mettez en œuvre une surveillance pour votre serveur Nginx et vos applications backend. Cela aide à détecter les problèmes de manière proactive avant qu'ils n'affectent les utilisateurs.
  • Maintenir Nginx à jour : Mettez régulièrement à jour Nginx vers la dernière version stable pour bénéficier des corrections de bugs et des correctifs de sécurité.
  • Comprendre vos applications : Ayez une bonne compréhension du comportement de vos applications backend, de leurs exigences en ressources et des modes de défaillance courants.

Conclusion

Le dépannage des erreurs Nginx est une compétence cruciale pour maintenir une présence web fiable. En vérifiant systématiquement les journaux, en validant les configurations et en comprenant les modèles d'erreurs courants comme les problèmes de permissions, les refus de connexion et les délais d'attente, vous pouvez diagnostiquer et résoudre efficacement les problèmes. N'oubliez pas de toujours tester les modifications de configuration et d'envisager d'optimiser vos applications backend pour de meilleures performances et une meilleure stabilité. Grâce à ces pratiques, vous pouvez maintenir votre serveur Nginx en parfait état de fonctionnement et votre site web accessible à tous.