У меня была довольно простая конфигурация для «/» в nginx, защищающая о DDos атак. Настройка рассматривалась в этой статье.
location / {
limit_req zone=defender burst=1 nodelay;
try_files $uri $uri/ /index.php?$args;
}
Здесь nginx вначале ищет $uri внутри своей корневой директории и если не находит отправляет fallback на php-fpm. Первым параметром мы задаем что именно этот локейшен находится под защитой limit_req.
Все бы хорошо, но в контексте WP, когда пользователь заходит на сайт, достаточно много запросов идут на wp-content и wp-includes. Это директории внутри корня сайта. Идет их такое большое количество, что моего ограничения в «разрешить 200 запрос в секунду с одного IP адреса» не хватало и пользователь получал бан по IP адресу, буквально открыв одну, две страницы. Спасибо моему коллеги, за то, что обнаружил данную проблему.
Исправить достаточно просто, нужно убрать из «защиты» эти «директории», либо же, если вдруг там ограничение нужно, увеличить его конкретно для них.
location / {
limit_req zone=defender burst=1 nodelay;
try_files $uri $uri/ /index.php?$args;
}
location /wp-content/ {
try_files $uri $uri/ /index.php?$args;
}
location /wp-includes/ {
try_files $uri $uri/ /index.php?$args;
}
В таком случае все запросы будут попадать под limit_req директиву, кроме wp-content и wp-includes.