limit_req - feature request?

vgoncharov nginx-forum на nginx.us
Вс Июн 20 00:36:24 MSD 2010


Геннадий, добрый день.

При всем уважениии, вы невнимательно
просмотрели эту тему Вы задали вопросы
и выдвинули аргументы на которые уже
есть ответы и всяческое
взаимопонимание.

> > limit_req_skip "zone" "$var_to_skip" для
> т.е. придется вводить
> лишнюю директиву

Игорь уже пояснил свою позицию и
написал свои аргументы. Тема
глобальных директив уже закрыта.

> limit_req_skip для локальной
> при обработке запросов к 99%

Вы недопоняли (или я недообъяснил)
limit_req_skip предлагалась локальной
(контекст location). Но уже не предланается.
Согласен с аргументами автора nginx.

> тогда вообще не понятно в
> чем проблема,
> скриптом ведь можно любой
> конфиг сгенерить.

Я же говорю - вы не поняли суть
проблемы.
Я не говорю, что мне влом прописать 100
строк в конфигах.
Я говорю о том, что НЕИЗВЕСТНО какие
location в каких серверах надо тормозить, а
какие не надо. Но я точно знаю, что надо
ограничиваь скорость к .php. Изучать 100
серверов можно. Но проще отказаться от
фичи ограничения скорости.

Nginx сегодня не позволяет ограничивать
запросы по условию.

И, конечно, как уже и писал, мне без
разницы где прописать ограничение и
сколько раз.

Важно понимать, что сегодня
прописывание limit_req в location "/" в общем
случае - бестолковое занятие. Тк есть и
картинки и стили и js и прочая лабудень.
Юзер кликнул, а на сервер сотня
запросов, а ленко и больше. 

Поэтому надо отделять запросы скорость
к которым надо ограничивать (скрипты)
от запросов к которым НЕ надо
ограничивать скорость (статика). Сейчас
это можно сделать только описываем
разных location'ов для статики и для
динамики.

В этом и проблема. Сейчас нужно
индивидуально настраевать каждый
сервер бакенда. Скриптом определить в
каком location там статика, а в каком
динамика - НЕВОЗМОЖНО. Поэтому
невозможно сгенерировать нужный
конфиг.

Но по $uri это можно сделать в
большинстве случаев. Да, не во всех. *.gif
МОЖЕТ оказаться динамикой, но .php
статикой уж врядли будет являтся. При
этом в .gif автоматические искатели
уязвимостей врядли смогут заподозрить
скрипт, в отличии от *php.

Я все равно плохо объяснил?

> замечательно. и что мешает
> в template для 99
> серверов внести дефолтовые
> limit_req ограничения,

Не о дефолтном просто речь. А об
ограничении, которое работает только
для определенных uri в location /. Куда его
внести - дело десятое.

Своими словами:
location / {
 
ограничить_скорость_запросов_к_$uri=~/\.php/_до_1r/s
nodelay burst=3
}

Возмем cms tiki-wiki. Там php в корне, а статика
по мульену подкаталогов.
Вот чтобы ограничение работало только
для php надо прописать ограничение на
корень, а потом описать тот самый
мульен подкаталогов со статикой. Но
СНОВА беда. В каждом подкаталоге со
статикой есть хотя бы один index.php (с
редиректом) - как его тормозить не
тормозя статики?

Насколько я понимаю, такая же ситуация
с joomla и прочей cms и board'ами. Они уже есть.
И в настоящее время разумно ограничить
скорость с такими движками невозможно.

> вообще, я так вижу, что
> конфиг nginx можно
> рассматривать
> как низкоуровневый язык
> ассемблера, больше всего
> nginx

Геннадий, я вижу, что вы любите nginx, мне
тоже он нравится. Вот и вся философия.

> напиминает nasm, и там и там:
> "Its syntax is designed
> to be simple and easy to understand". а свой
> собственный
> генератор конфига можно
> рассматривать как
> высокоуровневый
> специализированный язык. и

Повторяюсь не менее многократно Вашего
:-)
Вопрос не в том как сгенерить конфиги.
Вопрос в том, что то, что я прошу
сгенерить (равно как и написать в
ручную) НЕВОЗМОЖНО. Прочитайте
внимательнее первое письмо. В этом
(скиптовании и конфигогенерации) я не
лентяй ;-)

> если какую-то feature можно
> реализовать средствами
> генератора конфига, - тогда
> особо
> нет смысла просить
> реализовывать эту фичу в
> самом nginx.

Именно поэтому прошу реализовать :-)

В настоящее время остался вопрос.

Можно ли реализовать директиву в
контексте location
limit_req_if зона burst=N [nodelay] $var
Которая будет учытывать при подсчете
скорости не все запросы, а те, у которых
$var == true.

Насколько сложна такая реализация?

С уважением,
Владимир

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




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