Сконфигурируйте haproxy, чтобы он возвращал 204 для определенного соответствия ACL

8

Я хочу вернуть код ошибки HTTP 204, если кто-то пытается получить доступ к определенному пути на моем веб-сервере. Я мог бы настроить один из моих веб-серверов так, чтобы он возвращал ошибку 204 и указывал на него haproxy в качестве бэкэнда. Однако, поскольку информация не отправляется, я решил, что это можно сделать из самого haproxy. Не нужно беспокоить мои настоящие веб-серверы.

Я попытался создать бэкэнд, который бы генерировал ошибку 204 следующим образом:

frontend ...
    ...
    acl is_always204 path_beg /thisone
    use_backend always204 if is_always204
    ...

backend always204
    errorfile 404 /etc/haproxy-shared/errors/204.http

Файл 204.http содержит:

HTTP/1.0 204 No Content Cache-Control: no-cache Connection: close Content-Type: image/png

Когда я запускаю haproxy, я получаю эту ошибку:

parsing [/etc/haproxy/haproxy:51] : status code 404 not handled, error customization will be ignored.

Я думаю, что я могу поступить об этом неправильно. Кто-нибудь может предложить способ заставить haproxy вернуть 204 для данного соответствия acl?

TomOnTime
источник
2
Вы пытались сделать это 503ошибочным файлом? Фактических внутренних серверов нет, поэтому HAproxy должен обслуживать 503ответ.
Феликс Фрэнк
Считаете ли вы, что 204 является правильным кодом состояния для этой ситуации? Согласно документации HAProxy , 204 и 404 не поддерживаются коды возврата. Кажется, что это может захотеть вернуть 403 . 204 предполагает, что запрос был доставлен на сервер.
Энтони Фаммартино
1
Интересно. Content-Typeне имеет смысла в этом контексте, но здесь действительно недостаточно информации, чтобы понять, что это за контекст. Конечно, HTTP 204 все равно редко используется. Я чувствую, что 204 - это то, что исходный сервер, вероятно, должен отправлять его, если есть сценарий, в котором использование имеет смысл вообще.
Майкл Хэмптон

Ответы:

2

Как упомянуто в комментариях, вы не можете указать файл ошибок для 404, поскольку HAProxy никогда не сгенерирует 404. Вы должны использовать что-то вроде 503, которое HAProxy действительно излучает и имеет настраиваемый файл ошибок. Ваш файл 204 можно использовать как есть, просто замените 503 на 204 в вашей конфигурации.

dglloyd
источник