beste Weg, um Nginx-Konfigurationsdatei zu debuggen?

37

Ich habe eine Reihe von Umschreiberegeln, die ich von Apache nach Nginx portieren muss.

Es ist ein ziemlich schmerzhafter Prozess, da ich nicht sehen kann, ob meine Umschreiberegeln und "Wenn" -Bedingungen so funktionieren, wie ich es möchte.

Apache hatte ein Debugging für sein Rewrite-Modul. Was kann ich für Nginx tun?

Jiho Kang
quelle

Antworten:

37

Aktivieren rewrite_log:

rewrite_log on;

und setze Debug Level in der error_logDirektive:

error_log /var/log/nginx/localhost.error_log notice;
Quanten
quelle
so nah an Apache;) Ich muss auf jeden Fall einen Blick auf Nginx werfen
Olivier Pons
Beachten Sie, dass dies nicht nur zum Debuggen von Überschreibungen verwendet werden kann. Sie können "DEBUG DEBUG break umschreiben" hinzufügen. wo immer du willst in der nginx config und sieh wann es getroffen wird. Diese Neuschreibungszeile bewirkt praktisch nichts anderes (wenn die Position "DEBUG" übereinstimmt, ersetzen Sie sie durch "DEBUG") als das Auslösen einer zu protokollierenden Zeile. Sie können technisch sogar Variablen wie folgt ausgeben: "rewrite. * $ Request break;" oder neu schreiben. * "'$ http_x_forwarded_for' $ request" break; - obwohl dies dazu führt, dass die Anforderung fehlschlägt. Es ist besser, die Variable einem benutzerdefinierten Protokollformat für access_log hinzuzufügen.
Curtis Yallop
14

Aktivieren Sie die Debug-Unterstützung und legen Sie die Debug-Stufe in error_log fest.

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

Jetzt können Sie das Protokoll abschließen und Ihre Anforderungen durch senden. Es gibt wahrscheinlich mehr Details als Sie wollen, aber das kann manchmal ein Lebensretter sein.

Oh, und Sie sollten sich darüber im Klaren sein, dass, wenn es böse ist , zumindest in einem Ortskontext ...

rossnz
quelle
3
noticeist viel besser als debugdas error_levelfür das Debuggen, da es viele irrelevante Debug-Informationen auf niedriger Ebene überspringt (z. B. SSL- oder gzip-Details; mehr als 50 Zeilen pro Anfrage).
Dan Dascalescu
1

Die Verwendung von Protokollen und der integrierten Unterstützung für das Debuggen ist auf jeden Fall die sinnvollste Methode. Wenn Sie in einem frühen Stadium ein schnelles Routing-Debugging durchführen und nur über den Browser / Client interagieren möchten, geben Sie 4xx "text" zurück. Die Direktive kann Ihnen auch mit sehr geringem Aufwand die gewünschte Antwort geben. Beispielsweise,

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

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

Der Text auf der zurückgegebenen Webseite gibt an, welcher serverBlock Ihre Anfrage ausgelöst hat.

Hoffe das hilft!
Andres

fr_andres
quelle