modo migliore per eseguire il debug del file di configurazione di nginx?


37

Ho un sacco di regole di riscrittura che devo portare da Apache a Nginx.

È un processo piuttosto doloroso perché non riesco a vedere se le mie regole di riscrittura e le condizioni "se" funzionano come voglio.

Apache ha avuto il debug per il suo modulo di riscrittura. Cosa posso fare per nginx?

Risposte:


37

Abilita rewrite_log:

rewrite_log on;

e imposta il livello di debug nella error_logdirettiva:

error_log /var/log/nginx/localhost.error_log notice;

così vicino ad Apache;) Devo assolutamente dare un'occhiata a nginx
Olivier Pons

Si noti che questo può essere utilizzato per più di debug riscrive. Puoi aggiungere "riscrivi DEBUG DEBUG break;" ovunque ti piace nella configurazione di nginx e vedi quando viene colpito. Questa riga di riscrittura effettivamente non fa nulla (se la posizione "DEBUG" è abbinata, sostituirla con "DEBUG") se non per attivare una linea da registrare. Tecnicamente puoi anche generare variabili come questa: "riscrivi. * $ Richiesta interruzione;" o riscrivi. * "" $ http_x_forwarded_per interruzione "$ request"; - sebbene ciò causi il fallimento della richiesta. Sarebbe meglio aggiungere la variabile a un formato di registro personalizzato per access_log.
Curtis Yallop,

14

Abilita il supporto per il debug , quindi imposta il livello di debug in error_log.

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

Ora puoi adattare il registro e inviare le tue richieste. Probabilmente ci sono più dettagli di quanto tu voglia, ma a volte può essere un vero toccasana.

Oh, e dovresti essere consapevole che se il male è , in un contesto di posizione almeno ...


3
noticeè molto meglio di debugcome error_levelper le riscritture del debug perché salterà molte informazioni di debug irrilevanti di basso livello (ad es. dettagli SSL o gzip; oltre 50 righe per richiesta).
Dan Dascalescu,

1

L'uso dei log e il supporto integrato per il debug è sicuramente il modo più ragionevole. Se si sta eseguendo un debug di routing rapido nelle prime fasi e si desidera interagire solo attraverso il browser / client, utilizzando il "testo" di ritorno 4xx; direttiva può anche darti la risposta che desideri con il minimo sforzo. Per esempio,

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

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

Il testo nella pagina web restituita ti dirà quale serverblocco ha attivato la tua richiesta.

Spero che sia di aiuto!
Andres

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.