У нас есть веб-служба за сервером 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].