Atualmente, estou reconfigurando o HAProxy usando o 1.5dev-17. O que eu gostaria de fazer é retornar um erro 404 quando não houver back-end para usar em uma solicitação específica.
Nossa configuração atual usa o default_backend para rotear para nossos servidores de aplicativos django, mas quando há muitas solicitações de análise (como um teste de caneta) que não correspondem a nenhum dos outros back-ends configurados, nossos servidores django ficam paralisados enquanto tentam para atender a essas solicitações inválidas, retornando eventualmente um 404.
Eu gostaria de servir o 404 do HAProxy em vez de delegar para os back-ends do django. Atualmente, estou conseguindo isso com um hack:
frontend www
...
default_backend nomatch
backend nomatch
errorfile 503 /var/www/http/404.http
E dentro do arquivo 404.http, defino o código de status 404 nos cabeçalhos. Isso funciona, mas parece muito errado. Existe uma maneira melhor de conseguir isso com o HAProxy? Ou devo usar um back-end regular e deixar que ele responda com um 404?
fonte
HTTP/1.0 404 Not Found
seguido por outros cabeçalhos, depois uma linha em branco e o<html>
conteúdo.Respostas:
Se você concordar com qualquer um dos seguintes códigos de resposta: 200, 400, 403, 405, 408, 429, 500, 502, 503 ou 504.
Então você poderia fazer algo assim:
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#errorfilefonte
Depois de querer algo semelhante, é a mesma coisa que inventei. Parecia errado, mas funciona muito bem na prática e é muito mais limpo do que tentar colocar na lista negra determinados URLs. Apenas deixe um comentário para que ninguém o encontre pensando que está incorreto.
fonte