Nginx VS DDoS-атак
ispmanager
Ограничиваем скорость запросов
Это нужно, чтобы снизить нагрузку на сервер. У nginx есть буфер ограничения — сначала все запросы попадают в него, а далее уже с выбранной скоростью обрабатываются сервером без риска перегрузки.
Для настройки достаточно двух директив, ограничивающих скорость: limit_req_zone и limit_req. Они создадут зону, где будут храниться данные запросов со всех уникальных IP, а $binary_remote_addr ограничит их скорость под указанный показатель rate (r/s).
Балансируем нагрузку по серверам
Юзаем nginx в качестве прокси-сервера, чтобы существенно снизить риск атаки на конкретный сервер. Nginx циклически распределяет запросы, которые проецируются на серверы, если использовать директивы upstream и server. Если при балансировке добавить директиву proxy_pass через HTTPS, получится запустить обратный прокси.
Настраиваем отказ от подключения
Директива limit_conn обезопасит от DDoS-атаки через большое количество коннектов. Конфиг поможет не только поставить лимиты к серверу, но и контексту — можно идентифицировать каждый IP-адрес и ограничить число одновременных подключений. Если будет достигнуто ограничение, nginx станет отправлять ошибку 503 Service Unavailable, пока количество подключений не снизится.
А с помощью ispmanager защиту от DDoS-атаки можно подключить ещё легче. Она включается одной кнопкой и нужна для блокировки IP-адресов, с которых поступает большое количество запросов. Подробнее почитать можно в документации.
Сокращаем время на соединение
Дополнительно снизить нагрузку на сервер можно, если перестать грузить неактивные коннекты. Для этого есть сразу три крутых инструмента:
- Сжатие: nginx неплохо сжимает text/html через gzip. Можно настроить сжатие всех запросов, которые не будут кешироваться на прокси через директивы gzip_proxied. Nginx проверит Cache-Control поле заголовка и сожмёт ответ сервера, если он не кеширован. Профит — в дополнительной разгрузке сервера и ускоренных ответах. А ещё можно настроить сжатие статического контента одной кнопкой в панели ispmanager при создании сайта.
- Кеширование: поможет директива proxy_cache_path, чтобы сохранить статичные ресурсы, и переменная $purge_method, чтобы сбрасывать кеш. Это позволит серверу отправлять копии уже запрошенных ресурсов без повторных запросов, а ещё ускорит время подключения и ответа.
- Подключение keep-alive-соединений, чтобы клиент и сервер могли использовать 1 TCP-соединение для массы последовательных HTTP-запросов. Используя директиву keepalive_timeout, можно задать время ожидания, в течение которого сервер будет ждать новых запросов через открытое соединение.
Управляем буферизацией
Функция активна по умолчанию, но можно её тонко настроить. Например, увеличить размер буфера для проксируемых ответов сервера с помощью директивы proxy_buffer_size. Это также улучшит производительность сервера и поможет переваривать большие объёмы данных.