среда, 7 марта 2012 г.

nginx: ограничиваем коннекты и скорость

Модуль ngx_http_limit_req_module (0.7.21) позволяет ограничить число запросов по заданному ключу или, как частный случай, число запросов с одного IP-адреса.

limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;
location / {
...
limit_req zone=one burst=10;
}

burst в данном случае это превышение "над" лимитом, то есть

http://nginx.org/ru/docs/http/ngx_http_limit_req_module.html

Также нужно ограничивать подключения с 1 айпи во много потоков, это делается через другой модуль: ngx_http_limit_conn_module

limit_zone zone_name $binary_remote_addr 10m;

server {
location / {
limit_conn zone_name 8; <-- number of connections per IP
}
}

Скорость:
if ($slow) {
set $limit_rate 4k;
ngx_http_core_module.html#limit_rate
А также limit_rate_after

Такие вещи как: limit_zone zone_name $binary_remote_addr 10m;
limit_req_zone $binary_remote_addr zone=one:10m rate=5r/s;

можно устанавливать как в блоке server, так и глобально в http. Как я понимаю, также имеет значение имя этих переменных, если больше 1 проекта.

2 комментария:

  1. А если у меня много хостов. К каждому свой ключ делать?

    ОтветитьУдалить
  2. можно свой ключ, тогда будет для каждого сайта свой набор. Можно 1 ключ на все сайты. Но прописывать для каждого сайта надо, так нгинх устроен, в глобале не определить.

    ОтветитьУдалить