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.

1

Решение

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

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

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]