nginx: как очищается зона limit_req_zone?

Согласно документации nginx по limit_req_zone

В одной мегабайтной зоне может храниться около 16 тысяч 64-байтовых состояний. Если хранилище зоны исчерпано, сервер будет возвращать ошибку 503 (служба временно недоступна) на все дальнейшие запросы.

Интересно, а как очищаются эти зоны? Например, если у нас есть что-то вроде

limit_req_zone $binary_remote_addr zone=one:1m rate=1r/s;

и количество уникальных пользователей в сутки превышает 16000 - значит ли это, что зона будет переполнена и другие пользователи начнут получать ошибку 503 для настроенного местоположения? Или есть временные рамки бездействия пользователя, по истечении которых будет очищена память пользовательской зоны?

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


person Andrey Bulygin    schedule 16.01.2014    source источник


Ответы (2)


Это должно быть проверено, но, как я понял, время жизни элементов зоны относится к активным соединениям.
Таким образом, zone=one:1m может содержать до 16 тысяч уникальных IP-адресов среди текущих (одновременно) активных соединений (общее количество активных соединений на данный момент может превышать 16 тыс., поскольку с одного IP может быть открыто несколько соединений).
Таким образом, размер зоны в мегабайтах должен быть >= количество одновременных соединений из уникальных IP-адресов / 16K.

Обратите внимание: если пользователи используют один IP-адрес через NAT, что довольно часто встречается у провайдеров из СССР, вы ограничите частоту запросов для группы пользователей. это может быть очень неудобно для них, поэтому для обработки этого случая вы должны установить rate = simult_users_with_same_ip r/s

person luart    schedule 23.01.2014