NGINX второй limit_req не работает после перезаписи

Эта конфигурация limit_req работает, если я напрямую попадаю на php-страницы (index.php), но не, если он попадает в / [pretty urls] и переписывает его в index.php? $ Args.

limit_req_zone $binary_remote_addr zone=dynamic:10M rate=1r/s;
limit_req_zone $binary_remote_addr zone=static:10M rate=60r/s;

location / {
            limit_req zone=static burst=180;
            try_files $uri $uri/ /index.php?$args;
    }

location ~ \.php$ {
            limit_req zone=dynamic burst=5;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;

            set $fsn /index.php;
            if (-f $document_root$fastcgi_script_name){
                    set $fsn $fastcgi_script_name;
            }

            fastcgi_pass unix:/var/run/php5-fpm.sock;
            include fastcgi_params;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fsn;
            fastcgi_param  PATH_INFO        $fastcgi_path_info;
            fastcgi_param  PATH_TRANSLATED  $document_root$fsn;
    }

Очевидно, что он попадает в нужное место, потому что он переходит к бэкэнду, но limit_req, похоже, не используется. Я не могу найти ничего, что обсуждает это ограничение в документации. У кого-нибудь есть какие-либо идеи?

Изменить: комментирование первого с помощью zone = static позволяет работать с обработкой php. Для меня это похоже на ошибку в limit_req.


person RobC    schedule 22.11.2014    source источник
comment
Что такое содержимое limit_req_zone?   -  person Xavier Lucas    schedule 22.11.2014
comment
limit_req_zones определены в самом верху блока кода   -  person RobC    schedule 03.12.2014


Ответы (1)


Похоже, именно так работают NGINX и модуль limit_req ... возможно, в будущем он станет лучше.

После долгих поисков я нашел сообщение на форуме nginx, в котором говорится об этом http://forum.nginx.org/read.php?2,223426,223431, и кажется, что одно или оба из следующих утверждений верны (у меня нет интереса углубляться в это дальше).

  • Похоже, что если limit_req используется в «местоположении» с помощью директивы try_files, будущие директивы limit_req не используются.
  • Может случиться так, что после того, как местоположение обработает директиву limit_req, они не будут обрабатываться в другом «месте», но несколько limit_reqs в одном «месте» должны работать нормально.

Пока решение моей конфигурации состоит в том, чтобы удалить limit_req из / и настроить новое соответствие регулярного выражения местоположения для статических файлов и поместить туда limit_req для статических данных.

person RobC    schedule 03.12.2014