Configure haproxy para devolver un 204 para una determinada coincidencia de ACL

8

Quiero devolver un código de error HTTP 204 si alguien intenta acceder a una ruta particular en mi servidor web. Podría configurar uno de mis servidores web para que devuelva un error 204 y le señale haproxy como back-end. Sin embargo, dado que no se está enviando información, pensé que esto debería ser posible desde el propio haproxy. No es necesario molestar a mis servidores web reales.

Intenté crear un backend que generaría el error 204 de la siguiente manera:

frontend ...
    ...
    acl is_always204 path_beg /thisone
    use_backend always204 if is_always204
    ...

backend always204
    errorfile 404 /etc/haproxy-shared/errors/204.http

El archivo 204.http contiene:

HTTP/1.0 204 No Content Cache-Control: no-cache Connection: close Content-Type: image/png

Cuando inicio haproxy, me sale este error:

parsing [/etc/haproxy/haproxy:51] : status code 404 not handled, error customization will be ignored.

Creo que puedo estar haciendo esto de la manera incorrecta. ¿Alguien puede sugerir una forma de obligar a haproxy a devolver un 204 para una partida acl determinada?

TomOnTime
fuente
2
¿Has intentado hacer de este el 503archivo de error? No hay servidores de fondo reales, por lo que HAproxy debería servir la 503respuesta.
Felix Frank
¿Crees que un 204 es el código de estado correcto para esta situación? De acuerdo con la documentación de HAProxy , 204 y 404 no son códigos de retorno compatibles. Parece que esto podría querer devolver un 403 . 204 sugiere que la solicitud se entregó al servidor.
Anthony Fammartino
1
Interesante. Content-Typeno tiene sentido en este contexto, pero realmente no hay suficiente información aquí para descubrir cuál es el contexto. Por supuesto, HTTP 204 rara vez se usa de todos modos. Mi opinión sobre 204 es que el servidor de origen probablemente debería estar enviándola, si hay un escenario en el que usarlo tenga sentido.
Michael Hampton

Respuestas:

2

Como se menciona en los comentarios, no puede especificar un archivo de error para 404, ya que HAProxy nunca generará un 404. Debe usar algo como 503, que HAProxy realmente emite y tiene un archivo de error configurable. Su archivo 204 se puede usar como está, simplemente sustituya 503 por 204 en su configuración.

dglloyd
fuente