ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Предложение: Ограничение скорости для IP/Host/Location


  • To: nginx-ru@xxxxxxxxx
  • Subject: Предложение: Ограничение скорости для IP/Host/Location
  • From: "sofiamay" <nginx-forum@xxxxxxxx>
  • Date: Thu, 26 Dec 2013 07:44:52 -0500
  • Dkim-signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=selenium.jlkhosting.com; s=x; h=Date:Sender:From:Message-ID:Content-Transfer-Encoding:Content-Type:Subject:To; bh=k64ScQ1+NgrDObbh27HoWClza3I1zJdXVDGuVVt5sHk=; b=WB+i/tZ0xZvTOnmduIg85IHvAWMEjzUSXj6HisvJLaZ2lX5F2Pl9gP3+P3e7fJTdRShdAxb9SI9QRnjIhTMfA9w/PKHrDbsJNKl5rRkGCraik+c+eBJ8mHyW0UhwQF8NUUKQsB4RPxlwOX0fckhl30MEwpRzslVY7aJdd2gEZwQ=;

Всем привет,

Прошло столько лет, а воз и ныне там. Nginx до сих пор не умеет управлять
скоростью отдачи ответа, кроме как limit_rate per connection, даже не per
ip. Я предлагаю расширить управления скоростями. Это вопрос в частности к
Максиму Дунину и всем кто имеет отношение к развитию Nginx.

На данный момент Nginx в плане балансировки и ограничения скоростей по сути
ничего предложить не может, почти. Всё что предлагается сейчас это
limit_rate per connection (не для ip), т.е. ограничение отдачи ответа для
каждого соединения, что по сути малополезно и используется в основном с
limit_conn.

Суть моего предложения

Для начала хочу сказать что я понятия не имею как устроено всё внутри, но
предполагаю что так - при установке соединения nginx проверяет установлен ли
limit_rate для текущего location и если да то отправляет ответ порциями по
"n" килобайт в секунду для текущего подключения. Так вот я предлагаю ввести
такие понятия (по ограничению скорости) как:

1) Ограничение скорости отдачи на коннект (per Conn) - limit_rate уже есть,
отлично;

2) Ограничение скорости отдачи на IP (per IP). Поясняю, даже если юзер
создал 10 коннектов, то всё равно он получит заданную скорость. Как это
реализовать? Пускай Nginx отдает килобайты не по формуле "n" килобайт в
секунду, как в случае limit_rate, а пускай он отдаёт заветные килобайты по
формуле ("n" килобайт / count (IP connections)) в секунду, т.е. пускай
сервер математически делит лимит еще и на количество текущих коннектов с
этого IP. Это же так просто реализовать - подсчёт текущих коннектов с одного
ip (уже сделано в модуле limit_conn с его zone $binary_remote_addr).

3) Ограничение скорости отдачи на хост (per Host). Поясняю, даже если 10
юзеров одновременно качают файлы, то всё равно он получат заданную скорость
делённую на них всех. Как это реализовать? Пускай Nginx отдает килобайты не
по формуле "n" килобайт в секунду, как в случае limit_rate, а пускай он
отдаёт заветные килобайты по формуле ("n" килобайт / count (connections per
host)) в секунду, т.е. пускай сервер математически делит лимит еще и на
количество текущих коннектов к хосту. Это же так просто реализовать -
подсчёт текущих коннектов к хосту (например через zone $host).

4) Ограничение скорости отдачи на локейшен (per URL). Поясняю, даже если 10
юзеров одновременно качают файлы из папки /limit_download/, то всё равно он
получат заданную скорость для это локейшена, делённую на них всех. Как это
реализовать? Пускай Nginx отдает килобайты не по формуле "n" килобайт в
секунду, как в случае limit_rate, а пускай он отдаёт заветные килобайты по
формуле ("n" килобайт / count (connections per md5($request_uri))) в
секунду, т.е. пускай сервер математически делит лимит еще и на количество
текущих коннектов к локейшену. Это же так просто реализовать - подсчёт
текущих коннектов к хосту (например через zone $request_uri). А чтобы зона
не была в сотни мегабайт лучше хранить md5($request_uri)... и вообще когда
наконец сделаете в конфиге Nginx поддержку md5, уже надоело юзать perl
module для этих целей!

На мой взгляд, дописать формулы расчета скорости в функции отправки ответа,
да ввести парочку переменных в конфиг, а по сути сделать 3 маленьких модуля
за много лет уже можно было а? Я жду этих скоростных лимитов в Nginx уже
мноооого лет... Да и вообще как-то он слабо развивается, совсем не в ту
сторону которая нужна большинству пользователей. На мой взгляд такие
элементарные вещи нужно было реализовывать уже давно, а то сделали
limit_conn, limit req и limit rate и на этом всё, типа можешь ограничивать
скорости как душа пожелает. Душа как раз таки желает, только управления
скоростью в Nginx по сути нет, ограничение на каждый коннект (а не на все
коннекты ip адреса) - это для девочек в песочке поиграться. 

Или то, что я описал, это верх сложности!? Прямо как сделать поддержку UTF-8
в PHP (так и не сделали кстати). Не поверю, потому что сделать нужные
счетчики не сложнее чем уже сделано в limit_conn и limit rate.

Posted at Nginx Forum: 
http://forum.nginx.org/read.php?21,245848,245848#msg-245848

_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://mailman.nginx.org/mailman/listinfo/nginx-ru


 




Copyright © Lexa Software, 1996-2009.