Рейтинг:0

Как настроить HAProxy для игнорирования заголовка клиента «Pragma: no-cache»?

флаг ve

У нас есть веб-служба за сервером HAProxy, работающим в кеширующий обратный прокси конфигурация. Внутренние серверы отправляют Кэш-Контроль заголовки правильно для всех ответов, поэтому HAProxy может кэшировать все ответы в соответствии со спецификацией HTTP.

Однако, когда конечный пользователь нажимает кнопку Shift+Reload, например. Google Chrome, клиент (Chrome) отправляет Прагма: без кеша и Кэш-контроль: без кеша что заставляет HAProxy всегда получать запрос с внутреннего сервера. Очевидно, DDoS-атаки могут использовать тот же трюк, чтобы легко увеличить нагрузку на внутренние серверы.

Поскольку мы знаем, что заголовки кеша верны, как мы можем настроить HAProxy для игнорирования отправленных клиентом Прагма: без кеша и избегать вызова бэкэнда, когда запрос может быть выполнен напрямую из кеша HAProxy?

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

Вот пример ответа от внутреннего сервера, который будет переделан от внутреннего сервера, когда клиент отправит кеш-контроль: без кеша и прагма: без кеша:

кеш-контроль: общедоступный, максимальный возраст = 31536000, s-maxage = 31536000
длина содержимого: 463
тип содержимого: изображение/svg+xml
дата: Чт, 24 июня 2021 г., 14:14:19 по Гринвичу
тег: "338"
истекает: пятница, 24 июня 2022 г., 14:14:19 по Гринвичу
сервер: Апач
x-content-type-options: nosniff

это очевидно полностью бессмысленно снова получать это с внутренних серверов, потому что он действителен в течение одного года для любого пользователя, использующего данный URL-адрес. Также стоит отметить, что NGINX по умолчанию не учитывает заголовок Pragma [client].

флаг ve
На самом деле у нас есть несколько избыточных интерфейсов, работающих параллельно, и несколько избыточных серверных частей, но на самом деле это ничего не меняет в проблеме. Поэтому я написал приведенный выше упрощенный вопрос, как будто был только один внешний и один внутренний сервер.
флаг ve
https://www.haproxy.com/documentation/aloha/latest/traffic-management/lb-layer7/caching-small-objects/ говорит, что «* Объекты кэшируются только в том случае, если выполняются все следующие условия: [...] В ответе нет заголовка «Cache-Control: no-cache» *, что говорит о том, что в настоящее время это невозможно настроить. Технически это относится к компоненту Aloha, но я предполагаю, что это может быть применимо и ко всему HAProxy.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.