Configure o haproxy para retornar um 204 para uma determinada correspondência da ACL

8

Desejo retornar um código de erro HTTP 204 se alguém tentar acessar um caminho específico no meu servidor web. Eu poderia definir um dos meus servidores da web para retornar um erro 204 e apontar haproxy para ele como um back-end. No entanto, como nenhuma informação está sendo enviada, achei que isso deveria ser possível com o haproxy. Não há necessidade de incomodar meus servidores web atuais.

Tentei criar um back-end que geraria o erro 204 da seguinte maneira:

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

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

O arquivo 204.http contém:

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

Quando inicio o haproxy, recebo este erro:

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

Eu acho que posso estar fazendo isso da maneira errada. Alguém pode sugerir uma maneira de forçar o haproxy a retornar um 204 para uma determinada partida acl?

TomOnTime
fonte
2
Você já tentou fazer deste o 503arquivo de erro? Como não existem servidores de back-end reais, o HAproxy deve servir a 503resposta.
Felix Frank
Você acha que 204 é o código de status correto para esta situação? De acordo com a documentação HAProxy , 204 e 404 não são compatíveis com códigos de retorno. Parece que isso pode querer retornar um 403 . 204 sugere que a solicitação foi entregue ao servidor.
Anthony Fammartino
1
Interessante. Content-Typenão faz sentido nesse contexto, mas realmente não há informações suficientes aqui para descobrir qual é o contexto. É claro que o HTTP 204 raramente é usado de qualquer maneira. Minha opinião sobre 204 é que o servidor de origem provavelmente deveria enviá-lo, se houver um cenário em que usá-lo faça algum sentido.
Michael Hampton

Respostas:

2

Conforme mencionado nos comentários, não é possível especificar um arquivo de erro para 404, pois o HAProxy nunca gerará um 404. Você deve usar algo como 503, que o HAProxy realmente emite e possui um arquivo de erro configurável. Seu arquivo 204 pode ser usado como está, basta substituir 503 por 204 na sua configuração.

dglloyd
fonte