Servir 404 de HAProxy quand aucun acls ne correspond


15

Je reconfigure actuellement HAProxy à l'aide de 1.5dev-17. Ce que je voudrais faire, c'est retourner une erreur 404 quand il n'y a pas de backend à utiliser pour une demande particulière.

Notre configuration actuelle utilise le default_backend pour acheminer vers nos serveurs d'applications django, mais quand il y a beaucoup de demandes de sondage (comme un stylo-test) qui ne correspondent à aucun des autres backends configurés, nos serveurs django s'arrêtent lorsqu'ils essaient pour servir ces demandes invalides, retournant finalement un 404.

Je voudrais servir le 404 de HAProxy plutôt que de déléguer aux backends django. J'y parviens actuellement avec un hack:

frontend www
    ...
    default_backend nomatch

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

Et dans le fichier 404.http, j'ai défini le code d'état 404 dans les en-têtes. Cela fonctionne, mais se sent très mal. Existe-t-il un meilleur moyen d'y parvenir avec HAProxy? Ou devrais-je utiliser un backend normal et simplement laisser cette poignée répondre avec un 404?


Quel est le contenu du fichier 404.http?
Jason Floyd

3
@JasonFloyd HTTP/1.0 404 Not Foundsuivi de quelques autres en-têtes, puis d'une ligne vierge, puis du <html>contenu.
Josh Smeaton

Réponses:


4

Si vous êtes d'accord avec l'un des codes de réponse suivants: 200, 400, 403, 405, 408, 429, 500, 502, 503 ou 504.

Ensuite, vous pouvez faire quelque chose comme ceci:

frontend www
  ...
  default_backend no-match

backend no-match
  http-request deny deny_status 400

2

Après avoir voulu quelque chose de similaire, c'est la même chose que j'ai imaginée. Cela semblait mal, mais cela fonctionne très bien dans la pratique et est beaucoup plus propre que d'essayer de mettre sur liste noire des URL particulières. Assurez-vous simplement de laisser un commentaire afin que personne ne le rencontre en pensant qu'il est incorrect.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.