В настоящее время я переконфигурирую HAProxy с использованием 1.5dev-17. То, что я хотел бы сделать, это вернуть ошибку 404, когда нет никакого бэкэнда, чтобы использовать для определенного запроса.
Наша текущая конфигурация использует default_backend для маршрутизации на наши серверы приложений django, но при наличии большого количества пробных запросов (например, pen-test), которые не соответствуют ни одному из других сконфигурированных backends, наши серверы django останавливаются при попытке обслуживать эти недействительные запросы, в конечном итоге возвращая 404.
Я бы хотел обслуживать 404 от HAProxy, а не делегировать бэкэндам django. В настоящее время я достигаю этого с помощью взлома:
frontend www
...
default_backend nomatch
backend nomatch
errorfile 503 /var/www/http/404.http
И в файле 404.http я установил код состояния 404 в заголовках. Это работает, но чувствует себя очень неправильно. Есть ли лучший способ добиться этого с помощью HAProxy? Или я должен использовать обычный бэкэнд и просто позволить этой ручке отвечать 404?
источник
HTTP/1.0 404 Not Found
За @JasonFloyd следуют другие заголовки, затем пустая строка, затем<html>
содержимое.Ответы:
Если вы согласны с любым из следующих кодов ответа: 200, 400, 403, 405, 408, 429, 500, 502, 503 или 504.
Тогда вы можете сделать что-то вроде этого:
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#errorfileисточник
После того, как я захотел что-то похожее, я придумал то же самое. Это неправильно, но на практике работает очень хорошо и намного чище, чем пытаться занести в черный список определенные URL. Просто не забудьте оставить комментарий, чтобы никто не сталкивался с ним, думая, что это неправильно.
источник