J'obtiens 500 erreurs de serveur interne lorsque j'essaye de créer un HTTP POST à une adresse spécifique dans mon application. J'ai examiné les journaux du serveur dans le répertoire de journaux personnalisé spécifié dans le fichier d'hôtes virtuels, mais l'erreur ne s'affiche pas là-haut, donc le débogage a été une douleur dans le cul.
Comment puis-je amener Apache à consigner les erreurs internes 500 dans le journal des erreurs?
apache
error-logging
wcolbert
la source
la source
Réponses:
Notez s'il vous plaît: l'affiche originale ne posait pas spécifiquement des questions sur PHP. Toutes les réponses centrées sur php font de grandes hypothèses non pertinentes pour la question réelle.
Le journal d'erreurs par défaut, contrairement aux journaux d'erreurs des scripts, contient généralement l'erreur (plus) spécifique. souvent, il s'agira d'autorisations refusées ou même d'un interprète introuvable.
Cela signifie que la faute réside presque toujours dans votre script. par exemple, vous avez téléchargé un script perl mais ne lui avez pas donné les autorisations d'exécution? ou peut-être qu'il a été corrompu dans un environnement linux si vous écrivez le script dans Windows puis le téléchargez sur le serveur sans que les fins de ligne soient converties, vous obtiendrez cette erreur.
en perl si vous oubliez
vous obtiendrez cette erreur
Il y a plusieurs raisons à cela. Veuillez donc d'abord vérifier votre journal des erreurs, puis fournir plus d'informations.
Le journal des erreurs par défaut est souvent dans
/var/log/httpd/error_log
ou/var/log/apache2/error.log
.La raison pour laquelle vous consultez les journaux d'erreurs par défaut (comme indiqué ci-dessus) est que les erreurs ne sont pas toujours publiées dans le journal d'erreurs personnalisé tel que défini dans l'hôte virtuel.
Suppose linux et pas nécessairement perl
la source
grep PHP /var/log/syslog
. Probablement parce que j'avaiserror_log = syslog
en/etc/php5/apache2/php.ini
.Pourquoi les 500 erreurs internes du serveur ne sont-elles pas enregistrées dans vos journaux d'erreurs Apache?
Les erreurs qui causent votre erreur de serveur interne 500 proviennent d'un module PHP. Par défaut, PHP n'enregistre PAS ces erreurs. La raison en est que vous voulez que les requêtes Web soient aussi rapides que possible physiquement et c'est un risque pour la sécurité de consigner les erreurs à l'écran où les attaquants peuvent les observer.
Ces instructions pour activer la journalisation des erreurs du serveur interne concernent
Ubuntu 12.10
avecPHP 5.3.10
etApache/2.2.22
.Assurez-vous que la journalisation PHP est activée:
Localisez votre fichier php.ini:
Modifiez ce fichier en tant que root:
Trouvez cette ligne dans php.ini:
Changez la ligne ci-dessus en ceci:
Plus bas dans le fichier, vous verrez ceci:
Les points-virgules sont des commentaires, ce qui signifie que les lignes ne prennent pas effet. Modifiez ces lignes pour qu'elles ressemblent à ceci:
Ce que cela communique à PHP, c'est que nous voulons enregistrer toutes ces erreurs. Attention, il y aura un gros impact sur les performances, vous ne voulez donc pas que cela soit activé en production car la journalisation prend du travail et le travail prend du temps, le temps coûte de l'argent.
Le redémarrage de PHP et Apache doit appliquer le changement.
Faites ce que vous avez fait pour provoquer à nouveau l'erreur 500 Internal Server et vérifiez le journal:
Vous devriez voir l'erreur 500 à la fin, quelque chose comme ceci:
la source
display_errors
imprime les erreurs sur l' écran .log_errors
écrit des erreurs dans le fichier journal .Vérifiez votre journal d'erreurs php qui peut être un fichier séparé de votre journal d'erreurs apache.
Trouvez-le en accédant à
phpinfo()
et vérifiez l'attribut error_log. S'il n'est pas défini. Réglez-le: https://stackoverflow.com/a/12835262/445131Peut-ê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 faible.
la source
Je viens de rencontrer ceci et c'était dû à une mauvaise configuration de mod_authnz_ldap dans mon fichier .htaccess. Absolument rien n'était enregistré, mais j'obtenais toujours une erreur 500.
Si vous rencontrez ce problème particulier, vous pouvez modifier le niveau de journalisation de mod_authnz_ldap comme suit:
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 ).
la source
Si les informations d' erreur interne du serveur n'apparaissent pas dans les fichiers journaux, vous devez probablement redémarrer le service Apache .
J'ai constaté qu'Apache 2.4 (au moins sur la plate-forme Windows) a tendance à refuser obstinément de vider les fichiers journaux - au lieu de cela, les données enregistrées restent en mémoire pendant un certain temps. C'est une bonne idée du point de vue des performances, mais cela peut être déroutant lors du développement.
la source
Les réponses de @ eric-leschinski sont correctes.
Mais il y a un autre cas si votre API serveur est FPM / FastCGI (par défaut sur Centos 8 ou vous pouvez vérifier utiliser la fonction phpinfo ())
Dans ce cas:
phpinfo()
dans un fichier php;Loaded Configuration File
paramètre pour voir où se trouve le fichier de configuration de votre PHP.Vérifiez le
Server API
paramètre. Si votre serveur n'utilise que l'apache handle API -> redémarrez apache. Si votre serveur utilise php-fpm, vous devez redémarrer le service php-fpmVérifiez le fichier journal dans le dossier journal php-fpm. par exemple
/var/log/php-fpm/www-error.log
la source
Dans mon cas, c'était la directive ErrorLog dans httpd.conf. Je l'ai juste remarqué accidentellement après avoir abandonné. Décidé de partager la découverte) Maintenant, je sais où trouver les 500 erreurs.
la source
Ajoutez
HttpProtocolOptions Unsafe
à votre fichier de configuration apache et redémarrez le serveur apache. Il montre les détails de l'erreur.la source
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 les choses fonctionnent bien) et peut-être que vous testez 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.
la source
Essayez d'accéder à un fichier statique. Si cela ne fonctionne pas non plus, allez dans tous les répertoires de la racine "/" ou "c: \" au 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.
la source
Veuillez vérifier si vous désactivez le rapport d'erreur quelque part dans votre code.
Il y avait un endroit dans mon code où je l'ai désactivé, alors j'ai ajouté le code de débogage après:
la source