9 votes

nginx : comment retrouver un 500 aléatoire provenant de nginx (pas de mon application). Cela a potentiellement quelque chose à voir avec la charge ?

Nous avons récemment reçu des messages 500 de la part de nginx lui-même qui n'ont pas été enregistrés (nous avons des captures d'écran, mais rien dans les journaux). C'est bizarre en soi, car habituellement les erreurs y apparaissent. Quoi qu'il en soit, je me demande s'il existe quelque chose comme une taille de pool de connexion qui, si elle est maximale, entraînerait un 500 ? Nous avons établi une corrélation potentielle avec un récent pic de trafic, mais ce n'est pas concluant.

Quelqu'un a-t-il une idée de la manière d'aborder cette question ?

6voto

polynomial Points 3908

Nous utilisons une combinaison de formats de journaux dans nginx et lmon pour détecter ce genre de choses. Un format de journal NGINX comme :

log_format principal '$status:$request_time:$upstream_response_time:$pipe:$body_bytes_sent $connection $remote_addr $host $remote_user [$time_local] "$request" " $http_referer " " $http_user_agent " " $http_x_forwarded_for " $upstream_addr $upstream_cache_status "in : $http_cookie"

Cela permet de capturer un grand nombre d'informations de diagnostic utiles, comme le serveur en amont qui a traité la demande, et de mettre l'état en avant pour qu'il soit facile à lire même si les journaux défilent rapidement.

Nous utilisons LMON pour surveiller ces journaux et nous alerter (pagers/email) s'il voit des erreurs, comme 500s, 503s, 400s, dans les journaux :

http://www.bsdconsulting.no/tools/lmon-README

Cela peut vous aider à être alerté d'un problème au moment où il se produit, ce qui est le moment le plus facile pour le déboguer.

L'autre chose que vous devriez probablement prendre en compte si vous ne l'avez pas déjà fait, c'est que par défaut, nginx considère qu'un 500 est une condition fatale et n'essaye pas un autre amont. Si vous avez plusieurs flux ascendants, vous pouvez configurer le serveur pour qu'il en utilise un autre s'il reçoit un 500, en espérant que l'utilisateur ne verra pas l'échec :

http://wiki.nginx.org/NginxHttpProxyModule#proxy_next_upstream

4voto

Andrew Sledge Points 4883

error_log $filename debug; activera la journalisation du niveau de débogage dans le journal des erreurs -- cela vous donnera beaucoup de détails sur l'état interne de nginx au moment de l'erreur, et s'il est compilé avec --with-debug (ce que plusieurs distributions font par défaut), il en donnera encore plus.

Sachez que le niveau "debug" génère réellement lots de sortie, au point que vous pourriez vouloir surveiller votre espace disque...

1voto

Frank Points 113

Dans mon cas, le fichier de conf n'était pas nommé correctement (était exemple.com au lieu de exemple.com.conf) et n'a pas été inclus. D'une manière ou d'une autre, le résultat n'a pas été 'Welcome to nginx' mais une erreur HTTP 500 non enregistrée. En fait, elle a été enregistrée, mais dans le fichier d'erreur d'un hôte virtuel différent qui ne pouvait pas fonctionner avec cette url particulière.

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