2024-10-16 15:29:35 +03:00
|
|
|
|
# Описание зон ограничения количества запросов
|
|
|
|
|
|
|
|
|
|
#Используем переменную NGINX $binary_remote_addr, которая содержит двоичное представление IP-адреса клиента.
|
|
|
|
|
#Это означает, что мы ограничиваем каждый уникальный IP-адрес частотой запросов, определенной третьим параметром rate.
|
|
|
|
|
#(Используем эту переменную, потому что она занимает меньше места, чем строковое представление IP-адреса клиента, $remote_addr).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#Информация о состоянии примерно для 16 000 IP-адресов занимает 1МБайт,
|
|
|
|
|
#поэтому созданная зона может хранить около 160 000 адресов.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#Тут частота не может превышать 10 запросов в секунду 10 request/second.
|
|
|
|
|
#NGINX фактически отслеживает запросы с точностью до миллисекунды,
|
|
|
|
|
#поэтому этот предел соответствует 1 запросу каждые 100 миллисекунд (мс).
|
|
|
|
|
#Запрос отклоняется, если он поступает менее чем через 100 мс после предыдущего разрешенного.
|
|
|
|
|
|
2024-10-16 15:52:59 +03:00
|
|
|
|
#Пример
|
|
|
|
|
#limit_req_zone $binary_remote_addr zone=global_limits:10m rate=10r/s;
|
2024-10-16 15:29:35 +03:00
|
|
|
|
|
|
|
|
|
#Директива limit_req_zone задает параметры ограничения скорости и зоны общей памяти,
|
|
|
|
|
#но на самом деле не ограничивает скорость запросов. Для этого нужно применить ограничение
|
|
|
|
|
#к определенному блоку location или server, включив туда директиву limit_req.
|
|
|
|
|
|
|
|
|
|
#Например
|
|
|
|
|
# server {
|
|
|
|
|
# location /login/ {
|
|
|
|
|
# limit_req zone=mylimit;
|
|
|
|
|
# proxy_pass http://my_upstream;
|
|
|
|
|
# }
|
2024-10-16 15:52:59 +03:00
|
|
|
|
# }
|
|
|
|
|
|
|
|
|
|
limit_req_zone $binary_remote_addr zone=global_limits:10m rate=20r/s;
|