Как настроить ограничение запросов (limit_req) только для файлов с расширением PHP в связке Nginx и Apache?

Как добавить ограничение limit_req в Nginx только для php-скриптов на сайте, оставив остальные страницы без этого ограничения? В моем текущем конфиге Nginx в секции `location ~ \.php$` я добавил limit_req, но страницы с расширением .php перестают работать и выдают ошибку 404. Необходимо также, чтобы ограничение limit_req применялось к страницам, обрабатываемым Mod Rewrite Apache, например, site.com/drink/pepsi/. Мой конфиг сайта создан с использованием панели управления HestiaCP.
  • 21 марта 2024 г. 15:19
Ответы на вопрос 2
Для настройки ограничения запросов (limit_req) только для файлов с расширением PHP в связке Nginx и Apache, вам понадобится выполнить несколько шагов.

1. Настройка ограничения запросов в Nginx для файлов с расширением PHP:
В вашем конфигурационном файле Nginx добавьте следующую директиву limit_req в секцию location для файлов с расширением .php:
```
location ~ \.php$ {
    limit_req zone=mylimit burst=5 nodelay;
    ...
}
```
Где zone=mylimit - это название вашего ограничивающего зоны, burst=5 - максимальное количество запросов, которые могут быть обработаны за раз, nodelay - опция, позволяющая не учитывать задержку перед обработкой каждого запроса.

2. Настройка ограничения запросов для страниц, обрабатываемых Mod Rewrite Apache:
Для этого вам необходимо создать правило в файле .htaccess, который будет находиться в корневом каталоге вашего сайта. Например, чтобы применить ограничение запросов к страницам, содержащим `/drink/`, вы можете добавить следующее правило:
```
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteRule ^drink/ - [E=RATELIMIT:1]
</IfModule>
```
Где E=RATELIMIT:1 - это переменная RATELIMIT, которая указывает на то, что ограничение запросов должно быть применено к страницам, содержащим `/drink/`.

После настройки ограничения запросов в обеих системах (Nginx и Apache), убедитесь, что все страницы с расширением PHP и страницы, обрабатываемые Mod Rewrite Apache, работают корректно и ограничение запросов применяется только к ним.
Эмммм, 
location ~ \.php$ {
	limit_req zone=two burst=10 nodelay;
	limit_req_status 420;
	proxy_pass http://55.55.55.55:8080;
}

P.S. Стоп! location внутри location?
Похожие вопросы