Настройка Nginx limit_conn
Модуль Nginx ngx_http_limit_conn_module позволяет ограничить число соединений по заданному ключу, в частности, число соединений с одного IP-адреса. Учитываются не все соединения, а лишь те, в которых имеются запросы, обрабатываемые сервером, и заголовок запроса уже прочитан.
Документация для этого модуля http://nginx.org/ru/docs/http/ngx_http_limit_conn_module.html
В Nginx есть возможность ограничить количество соединений с одного адреса при помощи модуль ngx_http_limit_conn_module и ограничить количество запросов в единицу времени с одного адреса при помощи ngx_http_limit_req_module.
Примеры настройки limit_conn
Допустимо одновременное указание нескольких директив limit_conn, при этом будет срабатывать любое из ограничений. Например, следующая конфигурация ограничивает число соединений с сервером с одного клиентского IP-адреса и задает размер разделяемой памяти для состояний. При переполнении зоны в ответ на последующие запросы сервер будет возвращать ошибку (по умолчанию: limit_conn_status 503;).
$binary_remote_addr всегда равна 4 байтам для IPv4-адресов или 16 байтам для IPv6-адресов. При этом размер состояния всегда равен 32 или 64 байтам на 32-битных платформах и 64 байтам на 64-битных. В зоне размером 1 мегабайт может разместиться около 32 тысяч состояний размером 32 байта или 16 тысяч состояний размером 64 байта.
В секции http задается зона разделяемой памяти limit_conn_zone:
limit_conn_zone $binary_remote_addr zone=addr:10m;. limit_conn_zone $binary_remote_addr zone=perip:10m; limit_conn_zone $server_name zone=perserver:10m; limit_conn_zone $http_x_forwarded_for zone=perip:150m;
Далее уже в server или location описывается число допустимых одновременных соединений c одного ip-адреса. Можно задавать несколько настроек limit_conn в одном конфиге, с помощью limit_conn:
server { ... limit_conn perip 10; limit_conn perserver 100; }
Можно настроить разные лимиты на разные разделы сайта, например, на скрипты PHP и директории с файлами установить более жесткие правила, чем на статику.
location /download/ { # папка с файлами limit_conn addr 1; # разрешаем не более одного соединения с одного IP-адреса }
Более сложный пример, для обратного прокси, но чаще применимый. Первый параметр try_files нужен как заглушка, для дальнейшего перенаправления в локейшен fallback.
location /topcasino { limit_conn perip 5; try_files /does_not_exists @fallback; } location @fallback { proxy_pass http://127.0.0.1:8080; proxy_redirect http://127.0.0.1:8080 /; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Port $server_port; access_log off; }
Директивы наследуются с предыдущего уровня при условии, что на данном уровне не описаны свои директивы limit_conn.
Как собрать ip попадающие под limit_conn
Часто нужно не просто ограничить количество соединений, но и полностью заблокировать IP. Для этого переопределим код ответа, используемый при отклонении запросов на нестандартные ошибку, например
limit_conn_status 429;
В консоли запустим нижеприведенную команду, которая из yoursite.access.log соберет ip в block.conf, перезапустит Nginx и обнулит yoursite.access.log.
while true; do sleep 30 && cat /var/www/httpd-logs/yoursite.access.log | grep -v 403 | grep 429 | awk '{ print $1}' | sort | uniq -c | sort -nr | awk '{ if ($1>50) print "deny " $2 ";"}' >> /etc/nginx/vhosts-includes/block.conf && nginx -t && nginx -s reload && echo > /var/www/httpd-logs/yoursite.access.log ; done
📌 Для тестирования скриптов, установщиков VPN, Python ботов рекомендуем использовать надежные VPS на короткий срок. Если вам нужна помощь с более сложными задачами, вы можете найти фрилансера, который поможет с настройкой. Узнайте больше о быстрой аренде VPS для экспериментов и о фриланс-бирже для настройки VPS, WordPress. 📌
💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!7 Самых Популярных Статей
- Как запустить скрипты и веб-приложения на Python
- Что такое страны TIER 1,2,3
- 7 способов сравнения файлов по содержимому в Windows или Linux
- Установка и тестирование веб-панели HestiaCP
- Китайский VPN Shadowsocks простая установка и настройка
- top, htop, atop определение загрузки ОС (Load average, LA)
- Использование rsync в примерах