Encore une fois, je me sers de ce blog comme carnet de notes en espérant en faire profiter le plus possible avec une solution claire et simple. Dans cet article, je vais vous parler de cette erreur qui est ici plus complète que dans le titre : upstream timed out (110: Connection timed out) while reading response header from upstream.
J’aime bien les erreurs dans l’administration de serveurs web, c’est toujours un petit défit. Il faut séduire les moteurs de recherche, il y a des utilisateurs, on est vraiment connecté à la toile. C’est aussi le cas dans le cadre dans le développement de logiciel, mais les erreurs sur un serveur web, j’aime bien. Il faut les réparer et vite. Surtout que j’administre l’ensemble de mes serveurs en interne. Trouver la solution, c’est donc toujours agréable et c’est ce que je vais essayer de vous proposer ici. Ce n’est pas la première fois que je vous parle d’erreurs NGINX les plus courantes avec notamment celles-ci :
Je teste tout ce que je publie ici et surtout si je le fais, c’est moi-même pour me baser dessus, car je ne peux pas tout retenir de tête. J’ai une petite tête. Les écrits restent comme on dit. Ici, on va parler de cette erreur upstream timed out while reading response header from upstream. D’ailleurs, n’hésitez pas à aller dans les logs de votre serveur Linux, car c’est souvent très explicite pour trouver la solution à votre problème !
Que signifie cette erreur upstream timed out while reading response header
L’erreur complète dans mes logs : [error] 2652#2652: *72 upstream timed out (110: Connection timed out) while reading response header from upstream signifie que la requête a été envoyée à un processus PHP via FastCGI, dans mon cas php-fpm, mais que le serveur n’a pas reçu de réponse dans le délai imparti. Cela peut être dû à plusieurs raisons, telles qu’un script PHP qui prend trop de temps pour s’exécuter, des problèmes de performance du serveur ou une configuration inadéquate du timeout.
Comment résoudre cette erreur upstream timed out ?
Pour corriger cette erreur qui se produisait lorsque je tentai d’importer un gros fichier d’export avec de très nombreux articles dans WordPress lors d’une migration. On va donc faire une petite modification dans la configuration de notre site qui tourne avec NGINX.
Pour résoudre cette erreur while reading response header from upstream, il faut augmenter le délai d’attente de NGINX qui veut une réponse de PHP-FPM à la demande. Vous pouvez faire cela en modifiant votre configuration NGINX pour le site concerné qui est souvent situé dans /etc/nginx/sites-available/.
Il va falloir ajouter une nouvelle directive dans le bon bloc du fichier de configuration NGINX pour le site concerné. Il faut mettre cette directive dans la location ~ .php$ :
fastcgi_read_timeout 360;
Cette directive augmente le délai d’attente pour la lecture de la réponse de PHP-FPM à 360 secondes. Selon les cas, il faudra bien évidemment jouer sur d’autres leviers plutôt que d’augmenter cette valeur de manière démesurée. Si c’est un script que vous avez créé et dont vous avez la maîtrise, il faudra peut-être revoir son optimisation ou faire le traitement autrement.
N’oubliez pas que selon la configuration de PHP, il faudra peut-être aussi modifier cette valeur pour la faire correspondre. Rendez-vous dans le php.ini de votre PHP-FPM et augmentez la valeur en secondes :
max_execution_time = 360;
Pour terminer, vous devez redémarrer NGINX et PHP pour activer vos modifications (avec la bonne version de PHP installée sur votre serveur) :
sudo systemctl restart nginx
sudo systemctl restart php8.3-fpm
J’espère que ça vous aura aidé à résoudre votre problème et on se retrouve bientôt pour un prochain tutoriel !