В настоящее время я перенастраиваю 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
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-адреса. Только не забудьте оставить комментарий, чтобы никто не подумал, что он неправильный.