Cómo generar variables en el registro nginx para la depuración

83

Estoy probando nginx y quiero generar variables en los archivos de registro. ¿Cómo puedo hacer eso y a qué archivo de registro irá (acceso o error)?

lulalala
fuente

Respuestas:

143

Puede enviar valores variables nginx a través de encabezados. Práctico para el desarrollo.

add_header X-uri "$uri";

y verá en los encabezados de respuesta de su navegador:

X-uri:/index.php

A veces hago esto durante el desarrollo local.

También es útil para decirle si una subsección se está ejecutando o no. Solo espolvorea dentro de tus cláusulas para ver si se están acostumbrando.

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;
    ...
}

Por lo tanto, visitar una URL como http://www.example.com/index.php activará el último encabezado, mientras que visitar http://www.example.com/img/my-ducky.png activará el encabezado anterior.

yuvilio
fuente
29
Tenga en cuenta que solo add_headerfuncionará en solicitudes exitosas . La documentación indica que solo se puede aplicar a respuestas con códigos 200, 204, 301, 302 o 304. Por lo tanto, no se puede usar para depurar errores HTTP.
John WH Smith
31
@JohnWHSmith: Como señaló Marat en esta respuesta . A partir de la versión 1.7.5 , nginx agregó un parámetro "siempre" al add_headerque devolverá el encabezado, sin importar el código de respuesta. Entonces, por ejemplo, add_header X-debug-message "A php file was used" always;debería funcionar incluso para el código de error 500.
yuvilio
66
Esto no responde a la pregunta en absoluto. El tipo quiere iniciar sesión en el archivo de registro, no en el cliente.
Avamander
37

Puede devolver una cadena simple como respuesta HTTP:

location /
{
    return 200 $document_root;
}
Thomas Decaux
fuente
1
¿Qué sucede si desea devolver dos valores de variables?
BringBackCommodore64
Ir a la ubicación abre inmediatamente el cuadro de diálogo Guardar como de mi navegador (probado en Opera, Chromium). No hay respuesta alguna.
BringBackCommodore64
@ BringBackCommodore64 Puede ser útil agregar un encabezado Content-Type de texto / html.
Bitwise
Usando Postman , esto funciona sin ningún encabezado adicional. ¡Gracias!
aexl
19

Puede establecer un formato de registro de acceso personalizado utilizando la log_formatdirectiva que registra las variables que le interesan.

mgorven
fuente
2
gracias, y supongo que no hay una manera más fácil de generar una variable por sí misma.
lulalala
@lulalala No que yo sepa.
mgorven
Es posible establecer el nivel de registro en la directiva error_logpara debugque pueda ver el valor de las variables y el bloque que se ejecutan. Ejemploerror_log file.log debug
Victor Aguilar
1
observe que las variables vacías se muestran como -en el registro, pero están realmente vacías en el código nginx, no debe verificarlas -en ningún momento. Esto a veces confunde a los usuarios.
higuita
6

Otra opción es incluir el módulo echo cuando construye nginx, o instalar OpenResty, que es nginx incluido con un montón de extensiones (como echo).

Luego, simplemente puede rociar su configuración con declaraciones como:

echo "args: $args"
Mark Evans
fuente
2
Cuando intento esto, aparece en un archivo de texto sin formato en el servidor que interrumpe la salida de la página real.
JaredMcAteer
Hay una echo_logdirectiva en desarrollo.
Gajus