Назад | Перейти на главную страницу

Подавать 404 из HAProxy, если не совпадают списки ACL

В настоящее время я перенастраиваю HAProxy, используя 1.5dev-17. Я бы хотел вернуть ошибку 404, когда нет серверной части для использования для определенного запроса.

Наша текущая конфигурация использует default_backend для маршрутизации к нашим серверам приложений django, но когда есть много запросов на зондирование (например, проверка на проникновение), которые не соответствуют ни одному из других настроенных бэкэндов, наши серверы django останавливаются при попытке для обслуживания этих недействительных запросов, в конечном итоге возвращая 404.

Я хотел бы обслуживать 404 от HAProxy, а не делегировать его бэкэндам django. В настоящее время я достигаю этого с помощью взлома:

frontend www
    ...
    default_backend nomatch

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

А в файле 404.http я установил код состояния 404 в заголовках. Это работает, но кажется очень неправильным. Есть ли лучший способ добиться этого с помощью HAProxy? Или мне следует использовать обычный бэкэнд и просто позволить этому дескриптору отвечать 404?

Если вас устраивает любой из следующих кодов ответа: 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

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