Ich konfiguriere gerade HAProxy mit 1.5dev-17 neu. Ich würde gerne einen 404-Fehler zurückgeben, wenn für eine bestimmte Anfrage kein Backend zur Verfügung steht.
Unsere aktuelle Konfiguration verwendet das default_backend, um zu unseren Django-App-Servern zu routen. Wenn jedoch eine ganze Reihe von Testanforderungen (wie ein Pen-Test) mit keinem der anderen konfigurierten Backends übereinstimmen, werden unsere Django-Server beim Versuch angehalten um diese ungültigen Anforderungen zu bedienen und schließlich eine 404 zurückzugeben.
Ich möchte den 404 von HAProxy bedienen, anstatt ihn an die Django-Backends zu delegieren. Ich erreiche dies derzeit mit einem Hack:
frontend www
...
default_backend nomatch
backend nomatch
errorfile 503 /var/www/http/404.http
Und innerhalb der 404.http-Datei setze ich den 404-Statuscode in den Headern. Das funktioniert, fühlt sich aber sehr falsch an. Gibt es einen besseren Weg, dies mit HAProxy zu erreichen? Oder sollte ich ein reguläres Backend verwenden und dieses mit einem 404 beantworten lassen?
quelle
HTTP/1.0 404 Not Found
gefolgt von einigen anderen Überschriften , dann eine leere Zeile, dann der<html>
Inhalt.Antworten:
Wenn Sie mit einem der folgenden Antwortcodes einverstanden wären: 200, 400, 403, 405, 408, 429, 500, 502, 503 oder 504.
Dann könnten Sie so etwas tun:
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#errorfilequelle
Nachdem ich etwas Ähnliches wollte, habe ich mir das auch ausgedacht. Es fühlte sich falsch an, aber es funktioniert in der Praxis sehr gut und ist viel sauberer als der Versuch, bestimmte URLs auf die schwarze Liste zu setzen. Hinterlassen Sie einfach einen Kommentar, damit niemand darauf stößt und denkt, dass er falsch ist.
quelle