Servir 404 desde HAProxy cuando no hay coincidencias de acls


15

Actualmente estoy reconfigurando HAProxy usando 1.5dev-17. Lo que me gustaría hacer es devolver un error 404 cuando no hay un back-end para usar para una solicitud en particular.

Nuestra configuración actual utiliza default_backend para enrutar a nuestros servidores de aplicaciones django, pero cuando hay muchas solicitudes de sondeo (como una prueba de lápiz) que no coinciden con ninguno de los otros backends configurados, nuestros servidores django se detienen mientras intentan para atender estas solicitudes no válidas, eventualmente devolviendo un 404.

Me gustaría servir el 404 desde HAProxy en lugar de delegarlo a los backends de django. Actualmente estoy logrando esto con un truco:

frontend www
    ...
    default_backend nomatch

backend nomatch
    errorfile 503 /var/www/http/404.http

Y dentro del archivo 404.http configuré el código de estado 404 en los encabezados. Esto funciona, pero se siente muy mal. ¿Hay una mejor manera de lograr esto con HAProxy? ¿O debería usar un backend normal y dejar que el controlador responda con un 404?


¿Cuál es el contenido del archivo 404.http?
Jason Floyd

3
@JasonFloyd HTTP/1.0 404 Not Foundseguido de algunos otros encabezados, luego una línea en blanco, luego el <html>contenido.
Josh Smeaton

Respuestas:


4

Si está de acuerdo con cualquiera de los siguientes códigos de respuesta: 200, 400, 403, 405, 408, 429, 500, 502, 503 o 504.

Entonces podrías hacer algo como esto:

frontend www
  ...
  default_backend no-match

backend no-match
  http-request deny deny_status 400

2

Después de querer algo similar, esto es lo mismo que se me ocurrió. Me sentí mal, pero funciona muy bien en la práctica y es mucho más limpio que tratar de poner en una lista negra las URL particulares. Solo asegúrese de dejar un comentario para que nadie lo vea pensando que es incorrecto.

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.