La mejor manera de depurar el archivo de configuración nginx?

37

Tengo un montón de reglas de reescritura que tengo que portar de apache a nginx.

Es un proceso bastante doloroso porque no puedo ver si mis reglas de reescritura y las condiciones "si" funcionan como quiero.

Apache tuvo depuración para su módulo de reescritura. ¿Qué puedo hacer por nginx?

Jiho Kang
fuente

Respuestas:

37

Habilitar rewrite_log:

rewrite_log on;

y establecer el nivel de depuración en la error_logdirectiva:

error_log /var/log/nginx/localhost.error_log notice;
quanta
fuente
tan cerca de Apache;) Definitivamente tengo que echar un vistazo a nginx
Olivier Pons
Tenga en cuenta que esto puede usarse para algo más que depurar reescrituras. Puede agregar "reescribir DEBUG DEBUG break"; en cualquier lugar que desee en la configuración de nginx y vea cuándo es golpeado. Esta línea de reescritura efectivamente no hace nada (si la ubicación "DEPURACIÓN" coincide, reemplácela con "DEPURACIÓN") que no sea activar una línea para ser registrada. Técnicamente, incluso puede generar variables como esta: "rewrite. * $ Request break;" o reescribir. * "'$ http_x_forwards_for' $ request" break; - aunque esto hace que la solicitud falle. Sería mejor agregar la variable a un formato de registro personalizado para access_log.
Curtis Yallop
14

Habilite el soporte de depuración , luego configure el nivel de depuración en error_log.

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

Ahora puede seguir el registro y enviar sus solicitudes. Probablemente haya más detalles de los que deseas, pero eso a veces puede ser un salvavidas.

Ah, y debes tener en cuenta que si es malo , en un contexto de ubicación al menos ...

rossnz
fuente
3
noticees mucho mejor que debugcomo error_levelpara la depuración de reescrituras porque va a saltar un montón de bajo nivel de información de depuración irrelevantes (por ejemplo, datos SSL o gzip; más de 50 líneas por pedido).
Dan Dascalescu
1

El uso de registros y soporte integrado para la depuración es definitivamente la forma más razonable. Si está realizando una depuración de enrutamiento rápido en las primeras etapas y desea interactuar solo a través del navegador / cliente, utilizando el "texto" 4xx de retorno; La directiva también puede darle la respuesta que desea con muy poco esfuerzo. Por ejemplo,

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

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

El texto en la página web devuelta le indicará qué serverbloque activó su solicitud.

¡Espero que esto ayude!
Andres

fr_andres SoportesMonicaCellio
fuente