Попытка заблокировать спам-запросы в nginx

Попытка заблокировать спам-запросы в nginx

У меня есть многочисленные спам-запросы в журналах доступа/ошибок nginx, такие как:

/bcaashop/collections/new-era-new-era-indiana-pacers-nba-940-a-frame-snapback-black

который я блокирую таким образом:

if ($query_string ~ "\b(bca*.shop|nike|adidas)\b") { set $block_spam 1; } if ($block_spam = 1) { return 444; }

Но если запрос заканчивается на .json, например:

/bcaashop/collections/new-era-new-era-indiana-pacers-nba-940-a-frame-snapback-black.json

он выдаст ошибку 404 в error.log, заполнив его подобными ошибками запросов.

Я подозреваю, что это происходит из-за следующего правила:

location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|ttf|json|otf)$ { add_header Cache-Control "public"; expires 7d; }

который содержит json и переопределяет правило выше. Я пробовал изменить порядок правил, но я все еще получаю 404 вместо 444.

Как правильно блокировать запросы с json? Любой совет будет оценен.

Связанный контент