Come eseguire l'output della variabile nel registro nginx per il debug


83

Sto testando nginx e desidero generare variabili nei file di registro. Come posso farlo e quale file di registro andrà (accesso o errore).

Risposte:


143

Puoi inviare i valori delle variabili nginx tramite le intestazioni. Comodo per lo sviluppo.

add_header X-uri "$uri";

e vedrai nelle intestazioni di risposta del tuo browser:

X-uri:/index.php

A volte lo faccio durante lo sviluppo locale.

È anche utile per dirti se una sottosezione viene eseguita o meno. Basta cospargerlo nelle clausole per vedere se si stanno abituando.

location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt)$ {
    add_header X-debug-message "A static file was served" always;
    ...
}

location ~ \.php$ {
    add_header X-debug-message "A php file was used" always;
    ...
}

Quindi visitare un URL come http://www.example.com/index.php attiverà quest'ultima intestazione mentre visitando http://www.example.com/img/my-ducky.png attiverà la precedente intestazione.


29
Nota che add_headerfunzionerà solo su richieste riuscite . La documentazione afferma che può essere applicato solo alle risposte con i codici 200, 204, 301, 302 o 304. Pertanto, non può essere utilizzato per il debug degli errori HTTP.
John WH Smith,

31
@JohnWHSmith: Come ha osservato Marat in questa risposta . A partire dalla versione 1.7.5 , nginx ha aggiunto un parametro "sempre" al add_headerquale restituirà l'intestazione, indipendentemente dal codice di risposta. Quindi, ad esempio, add_header X-debug-message "A php file was used" always;dovrebbe funzionare anche per 500 codici di errore.
yuvilio,

6
Questo non risponde affatto alla domanda. Il ragazzo vuole accedere al file di registro non al client.
Avamandro

37

È possibile restituire una stringa semplice come risposta HTTP:

location /
{
    return 200 $document_root;
}

1
Cosa succede se si desidera restituire i valori di due variabili?
BringBackCommodore64

Accedere alla posizione apre immediatamente la finestra di dialogo Salva con nome del mio browser (testato su Opera, Chromium). Nessuna risposta.
BringBackCommodore64

@ BringBackCommodore64 L'aggiunta di un'intestazione di tipo di contenuto text / html può aiutare.
bit a bit

Utilizzando Postman , funziona senza intestazioni aggiuntive. Grazie!
aexl

19

Puoi impostare un formato di registro di accesso personalizzato utilizzando la log_formatdirettiva che registra le variabili che ti interessano.


2
grazie, e immagino non ci sia modo più semplice di produrre una variabile da sola?
Lulalala,

@lulalala Non che io sappia.
mgorven

È possibile impostare il livello di registro nella direttiva error_login debugmodo da poter vedere il valore delle variabili e quel blocco che vengono eseguiti. Esempioerror_log file.log debug
Victor Aguilar,

1
si noti che le variabili vuote sono mostrate come -nel registro, ma sono davvero vuote nel codice nginx, non si dovrebbe verificare -in qualsiasi momento. Questo a volte confonde gli utenti.
higuita,

6

Un'altra opzione è quella di includere il modulo echo quando si crea nginx o installare OpenResty che è nginx in bundle con un gruppo di estensioni (come echo.)

Quindi puoi semplicemente cospargere la tua configurazione con istruzioni come:

echo "args: $args"

2
Quando provo questo, viene visualizzato un file di testo semplice sul server che interrompe l'output della pagina effettiva.
JaredMcAteer

C'è una echo_logdirettiva in fase di sviluppo.
Gajus,
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.