Diagnostiquer et corriger une erreur 500 sur un VPS avec ISPConfig

Procédure

Une page blanche ou erreur 500, c'est quoi ?

L'erreur 500 est un code d'état d'une page qui veut dire Internal Server Error, littéralement "Erreur interne du serveur". Cela veut dire qu'une erreur s'est produite au niveau du serveur web. Ceci peut provenir du serveur web Apache2, de l'interpréteur PHP qui a transféré l'erreur au serveur web ou bien de la base de données MySQL qui a transféré l'erreur au niveau de PHP et à son tour l'a transféré au serveur web. Ça ressemble à ceci :

Diagnostiquer et corriger une erreur 500 sur un VPS avec ISPConfig

Quant à certains autres navigateurs, il se peut que vous voyiez juste une page blanche sans contenu :

Diagnostiquer et corriger une erreur 500 sur un VPS avec ISPConfig

Pour les sites Prestashop, vous verrez une page d’erreur généré par Prestashop :

Diagnostiquer et corriger une erreur 500 sur un VPS avec ISPConfig

Pour diagnostiquer le problème, il sera plus pratique d’afficher les erreurs de votre site web directement sur celui-ci (même si celle-ci sont visibles sur le fichier error.log du dossier log accessible par votre compte FTP.

Afficher les erreurs PHP

Pour afficher les erreurs PHP, il sera nécessaire de modifier le fichier php.ini du site web concerné. Dans ISPConfig, cliquez sur Sites puis sélectionnez le site web concerné :

Diagnostiquer et corriger une erreur 500 sur un VPS avec ISPConfig

Ensuite, cliquez sur l’onglet « Options » et ajoutez la ligne suivante sur le champ « Custom php.ini settings » :

display_errors = On

Diagnostiquer et corriger une erreur 500 sur un VPS avec ISPConfig

Il est également conseillé d'ajouter la ligne suivante pour s'assurer que les erreurs soient bien rapporté pour qu'ils s'affichent bien à l'écran (au cas où le script désactive cela par défaut) :

error_reporting = E_ALL

Activer le mode débogage sur votre site web

Certains CMS et framework comme WordPress, Prestashop, Symfony, Laravel, ... peuvent ignorer le fait que display_errors soit sur On au niveau de PHP, car ils ont leurs propres systèmes de gestion d’erreurs.

Activer le mode débogage sur WordPress

Pour activer le mode débogage d’un site basé sous WordPress, il faudra modifier le fichier wp-config.php en mettant la valeur de WP_DEBUG sur true et WP_DEBUG_DISPLAY sur true également.

Si WP_DEBUG_DISPLAY n’est pas sur wp-config.php, il faudra l’ajouter après WP_DEBUG :

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_DISPLAY', true);

Activer le mode débogage sur Prestashop

Pour activer le mode débogage sur Prestashop, il faudra modifier le fichier config/defines.inc.php. Dans ce fichier, il faudra mettre _PS_MODE_DEV_ sur true.

define('_PS_MODE_DEV_', true);

Activer le mode débogage sur Joomla

Pour activer le mode débogage sur Joomla, il faudra modifier le fichier configuration.php. Dans ce fichier, il faudra mettre $debug sur 1 et $error_reporting sur maximum.

public $debug = '1';
public $error_reporting = 'maximum';

Activer le mode débogage sur Laravel

Pour activer le mode débogage sur Laravel, il faudra modifier le fichier .env de celui-ci en mettant APP_DEBUG sur true :

APP_DEBUG=true

Ensuite, il faut supprimer le cache des fichiers de configuration. Sur votre console, exécutez la commande suivante :

php artisan config:clear

Comprendre les erreurs PHP

La deuxième étape la plus importante est de comprendre les erreurs et apporter une solution.

Parse error - syntax error

Les erreurs « parse error » et « syntax error » proviennent d’une mauvaise écriture du code PHP : manque de point-virgule à la fin, parenthèse qui ne se ferme pas, guillemets, … Il sera alors nécessaire de vérifier le script de votre site web.

Certaines syntaxes peuvent également poser problème uniquement sur certaines version PHP, car la syntaxe de PHP évolue entre plusieurs versions. Par exemple, l’usage des crochets pour déclarer un tableau fonctionne sur PHP 7.2, alors que ce n’est pas le cas sur PHP 7.4.

Il serait alors intéressant de vérifier et d’ajuster la version de PHP selon les spécificités de votre site web.

Fatal error: call to undefined function

Quand cette erreur se présente, la fonction que PHP tente d’appeler n’existe pas. Ce problème survient quand des fichiers sont manquants ou incomplets sur votre site web.

Fatal error: Uncaught Error: Call to undefined function mysql_connect()

Ce message d’erreur indique que la fonction mysql_connect() n’existe pas. Effectivement, cette fonction n’existe plus sur PHP 7.0 et ultérieur. Il faudra alors utiliser une version PHP 5.x pour que votre site web puisse fonctionner.

Fatal error: cannot redeclare

Quand cette erreur se présente, un même nom de fonction a été déclaré plusieurs fois. Ce problème survient notamment quand les plugins, thèmes, modules, … utilisent le même nom de fonction.

Fatal error: allowed memory size exhausted

Ceci veut dire que la mémoire RAM maximum autorisé est dépassée. Ce problème survient quand vous dépasser la limite memory_limit spécifié sur votre site web.

Les valeurs recommandés et pré-installés sur votre formule VPS sont les suivantes :

  • VPS S : memory_limit=1024M (1 Go)
  • VPS M : memory_limit=2048M (2 Go)
  • VPS L : memory_limit=4096M (4 Go)
  • VPS XL : memory_limit=6144M (6 Go)
  • VPS PRO S : memory_limit=7168M (7 Go)
  • VPS PRO M : memory_limit=8192M (8 Go)
  • VPS PRO L : memory_limit=9216M (9 Go)
  • VPS PRO XL : memory_limit=12288M (12 Go)

Toutefois, si vous souhaitez personnaliser la valeur de memory_limit, vous pouvez le faire depuis ISPConfig.

Toujours dans l’onglet « Options » de votre site web sur ISPConfig, je vous invite à ajouter la ligne memory_limit sur les directives PHP.INI :

Diagnostiquer et corriger une erreur 500 sur un VPS avec ISPConfig

Plus d’informations à ce sujet : Comment modifier le fichier php.ini de mon serveur VPS via ISPConfig ?

Fatal error: Maximum execution time exceeded

Ce message d’erreur est lié au fait que votre script PHP prend plus de temps à aboutir à un résultat, que ce que vos paramètres php.ini l’autorise.

Pour palier à ce problème, vous pouvez augmenter le temps d’exécution maximum. Toujours dans l’onglet « Options » de votre site web sur ISPConfig, je vous invite à ajouter la ligne suivante sur les directives PHP.INI :

max_execution_time = 1800

Ici, nous avons mis 1800 secondes, soit 30 minutes.

Important : Si le temps d'exécution de PHP est trop important, Apache2 peut ne pas pouvoir attendre jusqu'à la fin. Par conséquent, Apache2 va envoyer une erreur 503 à votre visiteur (une erreur 522 ou 524 si vous utilisez CloudFlare). Il est alors important de garder cette valeur le plus petit possible. Nous vous conseillons de le mettre sur 30 secondes (max_execution_time = 30), sauf si vous prévoyez de faire des opérations d'importations ou d'exportations en masse sur vos sites.

SQLSTATE[28000] [1045] Access denied for user

Ceci indique que l’utilisateur MySQL ou le mot de passe que vous utilisez est incorrect.

Diagnostiquer et corriger une erreur 500 sur un VPS avec ISPConfig
Exemple de page d’erreur de type « Access Denied » sur Prestashop

Si vous êtes sur WordPress, le message d’erreur peut être différent :

Error establishing a database connection

Pour vérifier si un combiné utilisateur/mot de passe MySQL est fonctionnelle, je vous invite à vous rendre sur phpMyAdmin et à les utiliser.

 

Diagnostiquer et corriger une erreur 500 sur un VPS avec ISPConfig

 

Si phpMyAdmin affiche aussi une erreur comme celui-ci, alors votre utilisateur ou votre mot de passe MySQL est incorrect. Vous pourrez alors le réinitialiser sur ISPConfig.

Link to database cannot be established:SQLSTATE[HY000] [2002] No such file or directory

Diagnostiquer et corriger une erreur 500 sur un VPS avec ISPConfig

Ce message d’erreur est lié au fait que votre site web tente de se connecter à votre serveur MySQL avec un socket Unix au lieu d’une connexion par TCP.

Or, le socket Unix qu’il tente d’utiliser n’est pas accessible à son niveau (effet de la restriction openbase_dir par exemple).

Pour résoudre ce problème, il sera nécessaire de forcer votre site web à utiliser la connexion par TCP en remplaçant « localhost » par « 127.0.0.1 » au niveau du paramètre du serveur MySQL de votre site web.

Pour un Prestashop 1.6, il faudra éditer le fichier config/settings.inc.php :

Diagnostiquer et corriger une erreur 500 sur un VPS avec ISPConfig

Pour un Prestashop 1.7, il faudra éditer le fichier app/config/parameters.php :

[...]
'database_host' => '127.0.0.1',
[...]

Pour un site WordPress, il faudra éditer le fichier wp-config.php :

[...]
define(‘DB_HOST’, ‘127.0.0.1’);
[...]

Pour un site Joomla, il faudra éditer le fichier configuration.php :

[...]
public $host = ‘127.0.0.1’;
[...]

Procédure en vidéo pour WordPress


 

Notez cet article


Vous avez noté 0 étoile(s)

Cet article vous a-t-il été utile ?

Merci !

N'hésitez pas à commenter nos pages afin de nous aider à les améliorer si besoin.

Vous souhaitez nous laisser un commentaire concernant cet article ?

Si cela concerne une erreur dans la documentation ou un manque d'informations, n'hésitez pas à nous en faire part depuis le formulaire.






Pour toutes questions non liées à cette documentation ou problèmes techniques sur l'un de vos services, cliquez ici si vous souhaitez contacter le support commercial ou le support technique