cloudflare + nginx с limit_req и limit_conn

Для простоты предположим, что у меня есть веб-сервер, на котором запущен nginx, обслуживающий один файл php (с сообщением "hello world") через php5-fpm.

Предположим, что сервер находится за облачной вспышкой и все запросы к моему серверу поступают через облачную вспышку.

При почти стандартной конфигурации все IP-адреса, сообщаемые nginx, являются IP-адресами облачной вспышки, поэтому мы используем realip_module и следуем по этой ссылке , чтобы установить реальный ip от cloudflare.

Мой следующий шаг - ограничить количество подключений и запросов к этому php-файлу до 1 запроса в секунду для каждого IP-адреса пользователя (но разрешить неограниченное количество запросов от самих cloudflare).

Согласно этот ответ безопасно использовать $ binary_remote_addr для применения ограничений, s говорят, что 300 пользователей в одном регионе и с использованием одного и того же периферийного местоположения Cloudflare получают доступ к сайту за одну секунду.

Поскольку cloudflare сообщает разные IP-адреса для всех, и каждый делает один запрос, никто никогда не увидит этот статус 503 страница и 300 запросов будут разрешены через cloudflare.

Случай 2:

Допустим, 3 человека получают доступ к моей странице в течение этой секунды. Из них 2 пользователя выполнили 1 единичный запрос, а третий пользователь использует ab (тест apache) для выполнения 10 одновременных запросов.

Поскольку cloudflare сообщает разные IP-адреса для всех, я могу предположить, что первые 2 пользователя увидят мою страницу без проблемы, в то время как третий человек дважды успешно запросит мою страницу (потому что я использую burst + nodelay), а затем получит страницу состояния 503 для остальных запросов в течение этой секунды. сообщения от cloudflare показываются пользователям, когда мой nginx начинает отвечать с ошибкой 503 этому конкретному плохому пользователю?

1
задан 23 May 2017 в 15:41
1 ответ

HTML (который является выводом PHP) по умолчанию не кэширован, поэтому они увидят ответ на свой собственный запрос, если только вы не кэшируете на nginx. Чтобы быть абсолютно уверенным, установите правило страницы, которое определяет "стандартное кэширование", или, если вы хотите быть параноиком, вы можете установить его без кэширования - но тогда вы должны быть осторожны с вашим паттерном совпадений, иначе CSS/JS не кэшируется.

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

.
0
ответ дан 4 December 2019 в 06:31

Теги

Похожие вопросы