Подавайте 404 від HAProxy, коли жоден acls не відповідає


15

Наразі я переконфігурую HAProxy за допомогою 1.5dev-17. Що я хотів би зробити, це повернути помилку 404, коли для певного запиту немає жодного бекенда.

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

Я хотів би обслуговувати 404 від HAProxy, а не делегувати до програмного забезпечення джанго. Я зараз це досягаю злом:

frontend www
    ...
    default_backend nomatch

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

А в файлі 404.http я встановлюю код заголовку 404 у заголовках. Це працює, але відчуває себе дуже неправильно. Чи є кращий спосіб досягти цього за допомогою HAProxy? Або я повинен використовувати звичайний бекенд і просто дозволити цій ручці відповідати 404?


Який вміст файлу 404.http?
Джейсон Флойд

3
@JasonFloyd HTTP/1.0 404 Not Foundсупроводжуються деякими іншими заголовками, потім порожній рядок, а потім <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

2

Після того, як захотіти чогось подібного, це те саме, що я придумав. Він відчував себе неправильно, але він працює дуже добре на практиці та набагато чистіший, ніж спроба внести в чорний список конкретні URL-адреси. Просто не забудьте залишити коментар, щоб ніхто не стикався з ним, думаючи, що це неправильно.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.