meilleur moyen de déboguer le fichier de configuration nginx?

37

J'ai un tas de règles de réécriture que je dois porter d'apache à nginx.

C'est un processus assez pénible car je ne suis pas en mesure de voir si mes règles de réécriture et les conditions "si" fonctionnent comme je le souhaite.

Apache a eu le débogage pour son module de réécriture. Que puis-je faire pour nginx?

Jiho Kang
la source

Réponses:

37

Activer rewrite_log:

rewrite_log on;

et définir le niveau de débogage dans la error_logdirective:

error_log /var/log/nginx/localhost.error_log notice;
quanta
la source
si proche d'Apache;) Je dois absolument jeter un oeil à nginx
Olivier Pons
Notez que cela peut être utilisé pour plus que le réécriture de débogage. Vous pouvez ajouter "rewrite DEBUG DEBUG break;" n'importe où dans la configuration de nginx et voyez quand il se fait toucher. En réalité, cette ligne de réécriture ne fait rien (si l'emplacement "DEBUG" est mis en correspondance, remplacez-le par "DEBUG") autre que déclencher une ligne à enregistrer. Vous pouvez même techniquement produire des variables telles que: "réécrire. * $ Demande break;" ou réécrire. * "'$ http_x_forwarded_for' $ request" break; - bien que cela provoque l'échec de la demande. Il serait préférable d’ajouter la variable à un format de journal personnalisé pour access_log.
Curtis Yallop
14

Activez la prise en charge du débogage , puis définissez le niveau de débogage dans error_log.

error_log   /var/log/nginx/error.log debug;

Vous pouvez maintenant suivre le journal et envoyer vos demandes. Il y a probablement plus de détails que vous ne le souhaitez, mais cela peut parfois vous sauver la vie.

Oh, et vous devriez être conscient que si c'est mal , dans un contexte d'emplacement au moins ...

Rossnz
la source
3
noticeest bien meilleur que debugpour les error_levelréécritures de débogage car il ignorera beaucoup d’informations de débogage non pertinentes de bas niveau (par exemple, SSL ou gzip; plus de 50 lignes par requête).
Dan Dascalescu
1

L'utilisation des journaux et la prise en charge intégrée du débogage constituent certainement le moyen le plus raisonnable. Si vous effectuez un débogage de routage rapide à un stade précoce et souhaitez interagir par le biais du navigateur / client uniquement, utilisez le texte de retour 4xx "text"; directive peut également vous donner la réponse que vous souhaitez avec très peu d'effort. Par exemple,

http {
  server {
    listen 80;
    server_name mydomain.net;
    return 404 "mydomain 80 route";
  }

  server {
    listen 80 default_server;
    return 404 "default 80 route";
  }
}

Le texte de la page Web renvoyée vous indiquera le serverblocage déclenché par votre demande.

J'espère que cela t'aides!
Andres

fr_andres SupportsMonicaCellio
la source