Ограничение балкового скачивания при помощи nginx/limit_req

Alexey Morozov morozov_ml на ngs.ru
Пт Дек 25 10:19:33 MSK 2009


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

Пытаюсь вот тут организовать "по-быстрому" ограничения на объём скачиваемых 
данных для одного клиента. Возникло несколько практических и, м-м-м, пока 
теоретических запросов.

Вопрос практический: какова семантика параметра burst в  limit_req ?
Хочется, чтобы клиент мог бы прислать сразу пачку запросов (ну, порядка 
50-60), чтобы у него быстро отрендерилась [видимая часть] странички, а потом 
сделать так, чтобы он эту страничку некоторое время "читал", может быть, 
подгружая по мере необходимости требуемые куски, но с меньшей интенсивностью, 
суммарно где-то примерно 500-600 запросов в минуту. Вероятно, из-за того, что 
я не понимаю, как именно работает пара rate/burst, у меня либо образуются 
недопустимые тормоза на этапе начального скачивания, либо, фактически, нет 
никакого ограничения на объём вытащенных данных (и, соответственно, нагрузку 
сервера одним клиентом).

Второй вопрос: целесообразно ли использовать $uid_got в качестве "$переменной" 
для отслеживания активности именно пользователей, а не IP-адресов -- в наше 
неспокойное время NAT стал скорее правилом, нежели исключением, и рубить с 
плеча всех пользователей с данного адреса было бы несправедливо, хотя, 
возможно, и необходимо. Какой размер хранилища при этом лучше ставить, 
насколько сильно оно будет тормозить по сравнению с $binary_remote_addr и что 
будет происходить, когда хранилище исчерпано?

Есть ли возможность соотносить данные по количеству запросов от клиента на 
нескольких фронтендных nginx'ах?

Может быть, в природе уже существуют лучшие решения для данной задачи, 
возможно, заброшенные и/или неофициальные?

Заранее спасибо,
Алексей Морозов



Подробная информация о списке рассылки nginx-ru