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)?

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.


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

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.


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"

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.