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?
fuente
HTTP/1.0 404 Not Found
seguido de algunos otros encabezados, luego una línea en blanco, luego el<html>
contenido.Respuestas:
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:
http-request
: http://cbonte.github.io/haproxy-dconv/1.7/configuration.html#4-http-requesterrorfile
: http://cbonte.github.io/haproxy-dconv/1.7/configuration.html#errorfilefuente
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.
fuente