Développement

    Corriger une erreur Bad Gateway sur PrestaShop

    20 février 2025
    (mis à jour le 15 mai 2025)
    3 min

    L'erreur 502 Bad Gateway est l'un des problèmes les plus frustrants sur PrestaShop. Elle survient lorsque le serveur web (souvent Nginx) ne parvient pas à obtenir une réponse valide du processus PHP en arrière-plan. Les causes sont multiples, mais le diagnostic suit une logique méthodique.

    Comprendre l'erreur 502 Bad Gateway

    Le code 502 signifie que le serveur frontal (Nginx, dans la plupart des environnements PrestaShop hébergés sur des serveurs dédiés ou VPS) a transmis la requête au serveur applicatif (PHP-FPM), mais que celui-ci n'a pas répondu correctement. Cela peut signifier que PHP a planté, a dépassé un délai d'exécution, ou que la communication entre les deux services est interrompue.

    Les causes fréquentes

    • PHP-FPM est arrêté ou surchargé (trop de processus simultanés)
    • Le script PHP dépasse le délai d'exécution (max_execution_time)
    • Les buffers Nginx sont trop petits pour les réponses de PrestaShop
    • Un module PrestaShop génère une erreur fatale PHP
    • La mémoire allouée à PHP est insuffisante (memory_limit)
    • Un problème réseau entre Nginx et le socket PHP-FPM

    Première étape : consulter les logs

    Avant toute modification, consultez les logs. Le fichier error.log de Nginx et le log PHP-FPM contiennent presque toujours l'indice clé. Cherchez des messages comme « upstream timed out », « recv() failed » ou « broken pipe ».

    bash
    # Logs Nginx
    tail -f /var/log/nginx/error.log
    
    # Logs PHP-FPM (chemin variable selon la distribution)
    tail -f /var/log/php-fpm/error.log
    tail -f /var/log/php8.1-fpm.log

    Ajuster les buffers et timeouts Nginx

    PrestaShop génère souvent des réponses HTTP volumineuses, notamment sur les pages de listing produit ou dans le back-office. Si les buffers Nginx sont trop petits, la réponse ne passe pas et Nginx renvoie une 502. Ajoutez ou ajustez ces directives dans votre bloc server ou location :

    nginx
    # Dans le bloc server ou http de Nginx
    proxy_buffer_size       128k;
    proxy_buffers           4 256k;
    proxy_busy_buffers_size 256k;
    
    # Si vous utilisez fastcgi (PHP-FPM via socket)
    fastcgi_buffer_size         128k;
    fastcgi_buffers             4 256k;
    fastcgi_busy_buffers_size   256k;
    fastcgi_read_timeout        300;

    Vérifier la configuration PHP-FPM

    Assurez-vous que PHP-FPM dispose de suffisamment de processus workers et de mémoire. Dans le fichier pool de PHP-FPM (souvent www.conf), vérifiez :

    ini
    ; Augmenter si nécessaire
    pm.max_children = 30
    pm.start_servers = 5
    pm.min_spare_servers = 5
    pm.max_spare_servers = 10
    
    ; Délai d'exécution
    request_terminate_timeout = 300

    Vérifier la mémoire PHP

    PrestaShop, surtout avec de nombreux modules et un catalogue volumineux, peut consommer beaucoup de mémoire. Vérifiez la valeur de memory_limit dans votre php.ini :

    ini
    ; php.ini
    memory_limit = 512M
    max_execution_time = 300

    Requêtes Ajax et back-office

    Certaines erreurs 502 ne surviennent que sur des requêtes Ajax spécifiques dans le back-office de PrestaShop (import produit, génération de statistiques, etc.). Dans ce cas, le problème est souvent lié au temps d'exécution. Augmentez les timeouts côté Nginx et PHP, et surveillez les logs pour identifier la requête exacte qui échoue.

    ⚠ Attention : Attention : augmenter les timeouts et la mémoire résout le symptôme, mais pas toujours la cause. Si un module consomme trop de ressources, il vaut mieux identifier et corriger le module en question. Les ajustements de configuration doivent rester raisonnables.

    Tester après chaque modification

    Après chaque changement de configuration, redémarrez les services concernés et testez :

    bash
    # Vérifier la syntaxe Nginx
    nginx -t
    
    # Redémarrer Nginx et PHP-FPM
    systemctl restart nginx
    systemctl restart php8.1-fpm
    
    # Tester une page problématique
    curl -I https://votre-site.fr/page-problematique

    Un projet en tête ?

    Discutons-en. Premier échange gratuit, réponse sous 24h.