limit_req и белый список

Sergey Novikov snov at aha.ru
Sat Sep 19 01:49:44 MSD 2009


Здравствуйте.

Хочется выборочно использовать limit_req, но не для всех IP, так как
на некоторых одновременно может быть много пользователей (и много
запросов).

Придумал такую конструкцию:

http {
  # Список адресов, для которых отвечаем без ограничений
  geo $whitelist {
    default  no;
    80.239.224.0/24  opera;
    # и т.д.
  }

  limit_req_zone $binary_remote_addr zone=backend:10m rate=10r/s;
}

location /
{
  if ($whitelist = no) {
    limit_req zone=backend burst=20;
  }
}

Не знаю, правильна ли эта конструкция с geo, но надеюсь моя мысль ясна
- для неизвестных ip
установить ограничение.

Проблема в том, что nginx сообщает:
# nginx -t
[emerg]: "limit_req" directive is not allowed here in ...

Если убрать if, то все в порядке, но теряется смысл списка.
limit_req zone=backend burst=$var; кажется, тоже не работает...

Придумать среднее значения для всех не получается.

Скажите, можно ли как-то это сделать?


More information about the nginx-ru mailing list