web-dev-qa-db-fra.com

Erreur interne 500 Apache, mais rien dans les journaux?

J'obtiens 500 erreurs de serveur interne lorsque j'essaie de créer un HTTP POST à une adresse spécifique dans mon application. J'ai consulté les journaux du serveur dans le répertoire de journal personnalisé spécifié dans le fichier hôtes virtuels, mais l'erreur ne s'affiche pas. Le débogage n'a donc pas été facile.

Comment faire en sorte qu'Apache consigne les erreurs internes 500 dans le journal des erreurs?

95
wcolbert

Pourquoi les 500 erreurs internes du serveur ne sont-elles pas consignées dans vos journaux d'erreurs Apache?

Les erreurs à l'origine de votre erreur 500 Internal Server proviennent d'un module PHP. Par défaut, PHP n'enregistre PAS ces erreurs. Vous voulez que les requêtes Web aillent aussi vite que physiquement et c'est un danger pour la sécurité de consigner les erreurs dans un endroit où les attaquants peuvent les observer.

Ces instructions pour activer la journalisation des erreurs internes au serveur concernent Ubuntu 12.10 avec PHP 5.3.10 et Apache/2.2.22

Assurez-vous que la journalisation PHP est activée:

  1. Localisez votre fichier php.ini:

    el@apollo:~$ locate php.ini
    /etc/php5/Apache2/php.ini
    
  2. Editez ce fichier en tant que root:

    Sudo vi /etc/php5/Apache2/php.ini
    
  3. Trouvez cette ligne dans le fichier php.ini:

    display_errors = Off
    
  4. Changez la ligne ci-dessus en ceci:

    display_errors = On
    
  5. Plus bas dans le fichier, vous verrez ceci:

    ;display_startup_errors
    ;   Default Value: Off
    ;   Development Value: On
    ;   Production Value: Off
    
    ;error_reporting
    ;   Default Value: E_ALL & ~E_NOTICE
    ;   Development Value: E_ALL | E_STRICT
    ;   Production Value: E_ALL & ~E_DEPRECATED
    
  6. Les points-virgules sont des commentaires, cela signifie que les lignes ne prennent pas effet. Changez ces lignes pour qu'elles ressemblent à ceci:

    display_startup_errors = On
    ;   Default Value: Off
    ;   Development Value: On
    ;   Production Value: Off
    
    error_reporting = E_ALL
    ;   Default Value: E_ALL & ~E_NOTICE
    ;   Development Value: E_ALL | E_STRICT
    ;   Production Value: E_ALL & ~E_DEPRECATED
    

    Ce que cela communique à PHP, c'est que nous voulons enregistrer toutes ces erreurs. Attention, les performances seront lourdes, vous ne voudrez donc pas que cela soit activé en production, car la journalisation prend du travail, et le travail prend du temps, coûtant de l'argent.

  7. Redémarrez PHP et Apache devrait appliquer la modification. 

  8. Faites ce que vous avez fait pour provoquer à nouveau l’erreur 500 Internal Server et consultez le journal:

    vi /var/log/Apache2/error.log
    
  9. Vous devriez voir l'erreur 500 à la fin, quelque chose comme ceci:

    [Wed Dec 11 01:00:40 2013] [error] [client 192.168.11.11] PHP Fatal error:  
    Call to undefined function Foobar\\byob\\penguin\\alert() in /yourproject/
    your_src/symfony/Controller/FuckedUpController.php on line 249, referer: 
    https://nuclearreactor.com/abouttoblowup
    
118
Eric Leschinski

Je viens de rencontrer ceci et cela était dû à une mauvaise configuration de mod_authnz_ldap dans mon fichier .htaccess. Absolument rien n’était enregistré, mais je continuais à avoir une erreur 500.

Si vous rencontrez ce problème particulier, vous pouvez modifier le niveau de journalisation de mod_authnz_ldap comme suit:

LogLevel warn authnz_ldap_module:debug

Cela utilisera un niveau de journal de débogage pour mod_authnz_ldap, mais avertira pour tout le reste ( https://httpd.Apache.org/docs/2.4/en/mod/core.html#loglevel ).

9
bmaupin

Vérifiez votre journal des erreurs php qui peut être un fichier séparé de votre journal des erreurs Apache.

Trouvez-le en allant à phpinfo() et vérifiez l’attribut error_log . S'il n’est pas défini. Définissez-le: https://stackoverflow.com/a/12835262/445131

Peut-être que votre post_max_size est trop petit pour ce que vous essayez de publier ou l'un des autres paramètres de mémoire maximale est trop bas.

8
jsonH

Si vos informations Internal Server Error n'apparaissent pas dans les fichiers journaux, vous devez probablement lancer redémarrer le service Apache.

J'ai constaté qu'Apache 2.4 (du moins sur la plate-forme Windows) avait tendance à refuser obstinément de vider les fichiers journaux. En revanche, les données enregistrées restaient en mémoire pendant un certain temps. C'est une bonne idée du point de vue de la performance, mais cela peut être déroutant lors du développement.

6
Álvaro González

Vérifiez que la version de php que vous utilisez correspond à votre base de code. Par exemple, votre environnement local peut exécuter PHP 5.4 (et tout fonctionne correctement) et vous testez peut-être votre code sur une nouvelle machine sur laquelle PHP 5.3 est installé. Si vous utilisez une syntaxe 5.4 telle que [] pour array (), vous obtiendrez la situation que vous avez décrite ci-dessus.

1
John Erck

Essayez d'accéder à un fichier statique. Si cela ne fonctionne pas, alors Allez dans tous les répertoires de la racine "/" ou "c: \" dans le répertoire de votre fichier et vérifiez s’ils contiennent des fichiers ".htaccess".

Une fois, j'ai laissé un fichier dans "c: \" et il a eu les résultats les plus étranges.

0
Lothar

Ajoutez HttpProtocolOptions Unsafe à votre fichier de configuration Apache et redémarrez le serveur Apache. Il montre les détails de l'erreur.

0
Saber

Dans mon cas, il s'agissait de la directive ErrorLog dans httpd.conf. Juste accidentellement remarqué déjà après que j'ai abandonné. Décidé de partager la découverte) Maintenant, je sais où trouver les 500 erreurs. 

0
Eugene Lycenok