4 votes

500 - Erreur interne du serveur N'apparaissant PAS dans error.log (ou access.log)

J'essaie de trouver un bogue ou une mauvaise configuration sur notre nouveau serveur web Debian qui fonctionne avec un système d'exploitation de type PHP/MySQL avec apache . Je ne vous ennuierai pas avec les détails sanglants ici, mais je veux juste vous demander :

Quelqu'un a-t-il déjà observé que le navigateur web recevait un " http 500 inernal server error "alors que RIEN de semblable n'apparaît dans le journal des erreurs et des accès d'Apache ? Ce ne sont pas les détails qui importent ici, mais simplement le fait que je pense que ce comportement étrange devrait déjà mener dans la bonne direction, car je ne pense pas qu'il y ait beaucoup de possibilités où cela puisse se produire du tout.

Lorsque cette erreur interne du serveur se produit, les scripts PHP continuent de s'exécuter sans problème, mais bien sûr le résultat qu'ils veulent délivrer au navigateur n'apparaîtra jamais, puisque le navigateur pense déjà que son erreur interne du serveur est la fin du monde tel qu'il le connaît.

Tout commentaire/idée est le bienvenu,

Romain.

0 votes

Il pourrait apparaître dans les journaux du noyau. C'est-à-dire que toutes nos applications internes sont enregistrées dans des répertoires spécifiques autres que le journal Apache racine ; mais si quelque chose se produit en dehors de l'application (disons que l'interpréteur se plante), cela sera enregistré dans /var/log/httpd/*. Cela peut-il être le cas ?

0 votes

C'est une très bonne idée, je vais vérifier cela.

6voto

Roman Blöth Points 101

SOLVÉ : Hélas, il y a un équilibreur de charge qui contrôle le serveur, et l'équilibreur de charge était configuré pour arrêter les connexions après environ 10 secondes d'inactivité. Le problème est maintenant résolu. La raison pour laquelle le message 500 n'est pas apparu dans le journal d'erreur d'Apache est que c'était le système "extérieur" (l'équilibreur de charge) qui arrêtait la connexion, et non le serveur lui-même. Merci à tous pour vos idées et votre aide ! J'espère que quelqu'un d'autre trouvera cela instructif un jour.

Meilleures salutations, Romain.

2voto

user9517 Points 113163

Cela pourrait être un problème avec votre Apache LogLevel ou cela peut être lié à la directive PHP erreur d'exécution la manipulation.

0 votes

C'est aussi un bon indice, merci. J'y jetterai un coup d'œil demain.

0 votes

Ok, le LogLevel d'Apache est "warn", et PHP a réglé son rapport d'erreur sur E_ALL. Mais toujours rien n'apparaît dans les logs. Il y a un fantôme dans la ligne qui envoie des erreurs 500 aux clients...

1voto

Balmipour Points 264

Autre possibilité : Recherchez @ dans vos fichiers sources.

Extrait de la documentation php

Avertissement
Actuellement, le préfixe "@" de l'opérateur de contrôle d'erreur désactivera même le rapport d'erreur pour les erreurs critiques qui mettront fin au script. l'exécution. Entre autres choses, cela signifie que si vous utilisez "@" pour supprimer les erreurs d'une certaine fonction et que celle-ci n'est pas disponible soit elle a été mal saisie, le script mourra sur le champ sans aucune indication de la raison.

Les crédits vont à Luc M qui m'a sauvé, ainsi que beaucoup d'utilisateurs de CodeIgniter.

0voto

MagicAndi Points 10128

Elle n'apparaîtra dans le journal des erreurs d'apache que si l'erreur est soulevée dans le code d'apache - mais vous devriez quand même la voir dans le journal des accès (avec un code d'état de 500) si l'état est défini dans le code PHP. Bien qu'il puisse y avoir des cas où le processus PHP se plante complètement (bien que cela soit très rare).

NB : cela peut également se produire lorsque vous vous connectez via un proxy et que ce dernier se plante.

0 votes

Il n'apparaît pas non plus dans le fichier access.log (désolé de ne pas l'avoir mentionné). Les processus php ne se plantent pas mais s'exécutent correctement pour terminer leurs tâches (nous pouvons le constater car php remplit un fichier journal personnalisé pendant son travail) alors que le navigateur affiche déjà "internal server error". Nous n'avons aucune idée d'où cela peut provenir.

0voto

Ben Lutgens Points 351

Le 500 provient d'un autre hôte via quelque chose en ligne dans le document ? Peut-être que votre CSS ou autre provient d'une autre boîte ? Essayez également d'ajouter un Journal des erreurs Directive. Utilisez Firebug ou les outils webdev de Chrome pour trouver d'où vient le 500, il pourrait même s'agir d'une publicité ou de quelque chose dans la page.

Essayez aussi quelque chose comme CURL ou LWP pour faire une demande, et voyez ce que sont les en-têtes de réponse, par exemple :

lwp-request -m HEAD -eSsd http://www.google.com/
HEAD http://www.google.com/ --> 200 OK
Cache-Control: private, max-age=0
Connection: close
Date: Tue, 19 Apr 2011 15:56:26 GMT
Server: gws
Content-Type: text/html; charset=ISO-8859-1
Expires: -1
Client-Date: Tue, 19 Apr 2011 15:56:26 GMT
Client-Peer: 74.125.91.99:80
Client-Response-Num: 1
Client-Transfer-Encoding: chunked
Set-Cookie:
REF=ID=b4ac3801dfbd939c:FF=0:TM=1303228586:LM=1303228586:S=nU_H2eC3zcLbTKfb;
expires=Thu,18-Apr-2013 15:56:26 GMT; path=/; domain=.google.com Set-Cookie:
NID=46=dsepCUy0iW9MDD7AkaP1-P4INDfRLTXz7l_TchQFzCGqtP4GU1EFbpn7K-sKq-ujNhpnR
Br8Cqgdyd3LyC3mxsRDOCCFoOn2OutZad7VWFs5erWVh0UNgEgkQJGqRe-; expires=Wed, 19-Oct-2011
15:56:26 GMT; path=/; domain=.google.com; HttpOnly
X-XSS-Protection: 1; mode=block

edit : GF a repéré une faute de frappe.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X