Ограничение балкового скачивания при помощи 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