nginx envía 200 respuestas en blanco

19

Estoy configurando un servidor de conmutación por error encargado de aceptar cualquier solicitud entrante y responder con una respuesta 200 en blanco. La idea es minimizar el tiempo de respuesta y garantizar que no enviemos 40x o 50x.

Intenté usar return 200;las ubicaciones deseadas dentro de Nginx, pero a mis sistemas de monitoreo (Pingdom) no les gustó la respuesta, y considero que el servidor no responde.

¿Hay una mejor manera de hacer esto, por supuesto, con una sobrecarga mínima en el servidor?

Sparsh Gupta
fuente

Respuestas:

23

El código de estado HTTP 204 No Contentestá destinado a decir "He completado la solicitud, pero no hay cuerpo para devolver":

10.2.5 204 Sin contenido

El servidor ha cumplido la solicitud pero no necesita devolver un cuerpo de entidad, y puede querer devolver metainformación actualizada. La respuesta PUEDE incluir metainformación nueva o actualizada en forma de encabezados de entidad, que si están presentes DEBERÍAN estar asociados con la variante solicitada.

Si el cliente es un agente de usuario, NO DEBE cambiar su vista de documento de la que provocó el envío de la solicitud. Esta respuesta está destinada principalmente a permitir la entrada de acciones para que tengan lugar sin causar un cambio en la vista de documento activa del agente de usuario, aunque DEBE aplicarse cualquier metainformación nueva o actualizada al documento actualmente en la vista activa del agente de usuario.

La respuesta 204 NO DEBE incluir un cuerpo de mensaje y, por lo tanto, siempre termina con la primera línea vacía después de los campos de encabezado.

Alexander Azarov
fuente
Hola Alex Gracias por la nota. Solo me pregunto si el código de respuesta 204 es reconocido por todos los principales navegadores en estos días. es decir, si mi servidor comienza a enviar 204, ¿hay alguna probabilidad de que algunos visitantes (a través de navegadores, móviles, terminales) reciban un error?
Sparsh Gupta
1
@SparshGupta No soy un experto en compatibilidad de navegador, lo siento. He realizado una comprobación rápida en un par de navegadores (FF 7 y Safari en Mac OSX): no hacen exactamente nada. Por ejemplo, si ya tiene una página abierta, coloca una URL que devuelve 204 en la barra de direcciones y presiona Enter, ambos navegadores aún muestran esa página anterior.
Alexander Azarov
29

Puede hacer que nginx devuelva un HTTP 200 vacío mediante un bloque de configuración como:

location = /health {
  return 200;
  #access_log off;
}

Puede descomentar la access_loglínea si no desea que se registren todos esos controles de estado.

Cody Caughlan
fuente
66
Cabe señalar que el signo '=' después de la ubicación es importante. Sin él, ese archivo debe existir, de lo contrario nginx no devolverá 200. Con él, puede inventar cualquier ubicación que desee y no preocuparse por los archivos y nginx devolverá felizmente 200.
Florin Andrei
¿Cómo combinar eso con la autenticación básica, de modo que la solicitud autenticada devuelva 200 y la 401 no autenticada?
Kiril