
Если вас регулярно ддосят, а ресурсы вашего сервера не велики - забудьте про Apache. Или используйте Nginx как проксирующий сервер к Апачу.
Для Nginx существует большое количество модулей, в том числе встроенных в сборку, позволяющих настроить эффективную защиту от ддос и хакерских атак. О некоторые мы уже писали: Nginx и Lua, Nginx и GeoIP. В этой теме попробуем обобщить все известные способы защиты от ддос с помощью Nginx.
Ограничение нагрузки на сайт с помощью настроек limit_conn и limit_req.
В стандартной сборке nginx есть модуль ngx_http_limit_conn_module (limit_conn) для ограничения числа одновременных соединений и ngx_http_limit_req_module (limit_req) для ограничения числа запросов за единицу времени. Можно настроить разные лимиты на разные разделы сайта, например, на скрипты (PHP) и директории с файлами установить более жесткие правила, чем на статику.
limit_conn
В секции http задается зона разделяемой памяти limit_conn_zone:
Далее уже в server или location описывается число допустимых одновременных соединений c одного ip-адреса:
помощью limit_conn:
Можно задавать несколько настроек limit_conn в одном конфиге.
limit_req
Задаем в секции http зону разделяемой памяти и максимальное количество запросов в секунду.
Задаем ограничение для определенных разделов и скриптов на сайте:
Для Nginx существует большое количество модулей, в том числе встроенных в сборку, позволяющих настроить эффективную защиту от ддос и хакерских атак. О некоторые мы уже писали: Nginx и Lua, Nginx и GeoIP. В этой теме попробуем обобщить все известные способы защиты от ддос с помощью Nginx.
Ограничение нагрузки на сайт с помощью настроек limit_conn и limit_req.
В стандартной сборке nginx есть модуль ngx_http_limit_conn_module (limit_conn) для ограничения числа одновременных соединений и ngx_http_limit_req_module (limit_req) для ограничения числа запросов за единицу времени. Можно настроить разные лимиты на разные разделы сайта, например, на скрипты (PHP) и директории с файлами установить более жесткие правила, чем на статику.
limit_conn
В секции http задается зона разделяемой памяти limit_conn_zone:
Код:
limit_conn_zone $binary_remote_addr zone=addr:10m;.
помощью limit_conn:
Код:
location /download/ { # папка с файлами
limit_conn addr 1; # разрешаем не более одного соедниения с одного IP-адреса
}
Код:
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;
server {
...
limit_conn perip 10; // задаем ограничение для IP
limit_conn perserver 100; // задаем ограничения для всего виртуалхоста
}
Задаем в секции http зону разделяемой памяти и максимальное количество запросов в секунду.
Код:
limit_req_zone $binary_remote_addr zone=one:10m rate=2r/s; #ограничение 2 запроса в секунду
Код:
server {
...
# ограничение для раздела поиска
location /search/ {
limit_req zone=one burst=5; # burst указывает на максимальное превышение лимита, так если в 1 секунду пришло с адреса 5 запросов, то в следующую секунду запрос не обработается, если всплесков не предусмотрено то устанавливается параметр nodelay вместо burst=5
}
Последнее редактирование: