Re: Не работает limit req

Валентин Бартенев vbart at nginx.com
Fri Jul 11 23:26:52 UTC 2014


On Friday 11 July 2014 19:03:28 nNgzlTtv3k5lzmKRvlmS22tSl8sJr68k wrote:
> Возникла надобность использовать limit_req, но столкнулся с неприятным
> моментом работы ограничителя. В документации приводится пример:
> 
> limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
> 
> server {
>     location /search/ {
>         limit_req zone=one;
>     }
> }
> 
> который (за отсутствием исчерпывающего описания) наталкивает на мысль, что
> указанный limit_req будет ограничивать частоту прихода запросов GET
> /search/, однако на практике это не так.
> Счётчик, указанный директивой limit_req_zone, является глобальным для
> $binary_remote_addr и накручивается независимо от запроса. Из-за этого если
> в одну и ту же секунду от одного и того же IP пришёл какой-то запрос и
> запрос GET /search/, последний будет отклонён - сработает limit_req, хотя он
> был единственным search-ем за эту секунду.

Нет, учитываются только запросы пришедшие в location с limit_req.


> 
> Попробовал на опыте - действительно работает не так, как ожидалось:
> 
> http {
>     limit_req_zone $binary_remote_addr zone=limited:10m rate=1r/s;
> 
>     server {
>         listen 80 default_server;
>         location / { return 404; }
>         location /123 {
>             root /tmp/zzz;
>             limit_req zone=limited nodelay;
>         }
>     }
> }
> 
> 
> bash$ touch /tmp/zzz/123
> 
> bash$ { curl -s -o /dev/null -D - localhost/123; curl -s -o /dev/null -D -
> localhost/123; } | fgrep HTTP
> HTTP/1.1 200 OK
> HTTP/1.1 503 Service Temporarily Unavailable
> 
> bash$ { curl -s -o /dev/null -D - localhost/aaaaa; curl -s -o /dev/null -D -
> localhost/123; } | fgrep HTTP
> HTTP/1.1 404 Not Found
> HTTP/1.1 503 Service Temporarily Unavailable
[..]

Попробовал на 1.6.0 ваш пример с вашим конфигом:

% { curl -s -o /dev/null -D - localhost/aaaaa; curl -s -o /dev/null -D - localhost/123; } | fgrep HTTP
HTTP/1.1 404 Not Found
HTTP/1.1 200 OK

Что-то вы не так делаете.

--
Валентин Бартенев


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