Служите 404 от HAProxy, когда нет совпадений acls

15

В настоящее время я переконфигурирую 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?

Джош Смитон
источник
Каково содержимое файла 404.http?
Джейсон Флойд,
3
HTTP/1.0 404 Not FoundЗа @JasonFloyd следуют другие заголовки, затем пустая строка, затем <html>содержимое.
Джош Смитон

Ответы:

4

Если вы согласны с любым из следующих кодов ответа: 200, 400, 403, 405, 408, 429, 500, 502, 503 или 504.

Тогда вы можете сделать что-то вроде этого:

frontend www
  ...
  default_backend no-match

backend no-match
  http-request deny deny_status 400
rbjorklin
источник
2

После того, как я захотел что-то похожее, я придумал то же самое. Это неправильно, но на практике работает очень хорошо и намного чище, чем пытаться занести в черный список определенные URL. Просто не забудьте оставить комментарий, чтобы никто не сталкивался с ним, думая, что это неправильно.

Филипп Криштиану
источник