najlepszy sposób na debugowanie pliku konfiguracyjnego Nginx?

37

Mam kilka reguł przepisywania, które muszę przenieść z Apache na Nginx.

Jest to dość bolesny proces, ponieważ nie jestem w stanie sprawdzić, czy moje zasady przepisywania i warunki „jeśli” działają tak, jak chcę.

Apache miał debugowanie dla swojego modułu przepisywania. Co mogę zrobić dla Nginx?

Jiho Kang
źródło

Odpowiedzi:

37

Włącz rewrite_log:

rewrite_log on;

i ustaw poziom debugowania w error_logdyrektywie:

error_log /var/log/nginx/localhost.error_log notice;
kwanty
źródło
tak blisko Apache;) Zdecydowanie muszę rzucić okiem na nginx
Olivier Pons
Pamiętaj, że można tego użyć do więcej niż debugowania przepisywania. Możesz dodać „przepisz DEBUG DEBUG break;” w dowolnym miejscu w konfiguracji nginx i zobacz, kiedy zostanie trafiony. Ta linia przepisywania skutecznie nic nie robi (jeśli dopasowana jest lokalizacja „DEBUG”, zastąp ją „DEBUG”) poza wyzwalaniem linii do zalogowania. Technicznie można nawet wyprowadzać zmienne takie jak: „przepisać. * $ Request break;” lub przepisz. * „” $ http_x_forwarded_for '$ request ”przerwa; - chociaż powoduje to niepowodzenie żądania. Lepiej byłoby dodać zmienną do niestandardowego formatu dziennika dla access_log.
Curtis Yallop,
14

Włącz obsługę debugowania , a następnie ustaw poziom debugowania w dzienniku błędów.

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

Teraz możesz dostosować dziennik i wysłać swoje żądania. Prawdopodobnie jest więcej szczegółów, niż chcesz, ale czasem może to uratować życie.

Aha, powinieneś zdawać sobie sprawę, że jeśli jest zły , przynajmniej w kontekście lokalizacji ...

Rossnz
źródło
3
noticejest znacznie lepszy niż debugw error_levelprzypadku debugowania przepisywania, ponieważ pominie wiele nieistotnych informacji debugowania na niskim poziomie (np. szczegóły SSL lub gzip; ponad 50 wierszy na żądanie).
Dan Dascalescu
1

Korzystanie z dzienników i wbudowanej obsługi debugowania jest zdecydowanie najbardziej rozsądnym sposobem. Jeśli wykonujesz szybkie debugowanie routingu na wczesnych etapach i chcesz komunikować się tylko za pomocą przeglądarki / klienta, używając zwracanego „tekst” 4xx; Dyrektywa może również dać odpowiedź, którą chcesz przy bardzo małym wysiłku. Na przykład,

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

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

Tekst na zwróconej stronie powie ci, który serverblok został wywołany przez twoje żądanie.

Mam nadzieję że to pomoże!
Andres

fr_andres
źródło