Добрый день.

Была задача ограничить кол-во запросов к бэкенду. Например, чтобы
одновременно не поступало более 1 запроса. Остальные запросы, пока работает
бэкенд, могли отваливаться по ошибке, это не страшно.
С помощью Perl я устанавливал переменную, которая показывала идет ли запрос
для проксирования на бэкенд или нет. И эту переменную использовал в качестве
ключа для
http://nginx.org/ru/docs/http/ngx_http_limit_conn_module.html#limit_conn_zone

perl_set $service_hit '
        sub {
            my $r = shift;
            if($r->uri =~ m|^/services/post|){
                return "services";
            } else {
                return "";
            }
        }
';
limit_conn_zone "$service_hit" zone=perservice:10m;

Потом перед проксированием на бэкенд (в location) использовал ограничениие
http://nginx.org/ru/docs/http/ngx_http_limit_conn_module.html#limit_conn

limit_conn perservice 1;

Все отлично работает, но только первые 30-60 минут, потом nginx для всех
запросов возвращает 503 ошибку, т.е. счетчик не сбрасывается. Если
остановить-запустить nginx, то опять какое-то время все работает корректно.
В чем может быть проблема?

Спасибо.

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

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

Ответить