Блокировка запросов типа referrer в nginx.
Случилась такая ситуация, что нагрузка на nginx резко возросла, cpu сервера стал загружен на 100%. Соответственно, сайт перестал работать корректно. В логе было очень много запросов типа referrer:
2023/12/22 18:42:55 [error] 5299#5299: *5765287617 upstream prematurely closed connection while reading response header from upstream, client: 217.106.239.117, server: hostname.com, request: "GET /wrapper.php?method=container&shopId=1371 HTTP/2.0", upstream: "https://10.1.1.11:444/wrapper.php?method=container&shopId=1371", host: "hostname.com", referrer: "https://referrer-domain.com/"
В nginx был добавлен следующий блок, который решил проблему:
map $http_referer $block_referrer { default 0; "https://referrer-domain.com/" 1; } server { server_name; listen 80; if ($block_referrer) { return 403; } }
Файл с map можно вынести отдельно, например в /etc/nginx/block_referrers.map.
Есть вариант добавить такой блок, чтобы блокировать по переменным в запросе:
location ~ ^/wrapper\.php { if ($arg_shopId = 1371) { return 403; }
Но в моём случае этот вариант отработал некорректно и похоже что блокировка пошла на вес запросы к файлу wrapper.php.