Как установить ограничение на количество входящих запросов в WordPress

Часто владельцы сайтов на WordPress сталкиваются с проблемой перегрузки сервера из-за большого количества входящих запросов. Это может быть вызвано ботами, сканерами, или даже легитимным, но слишком частым обращением пользователей. В статье расскажем, как установить ограничение на количество входящих запросов, чтобы защитить сайт от перегрузок и атак типа DoS.

Зачем ограничивать входящие запросы в WordPress

Ограничение количества запросов помогает:

  • Снизить нагрузку на сервер и ускорить работу сайта;
  • Предотвратить атаки типа DoS и DDoS;
  • Уменьшить риск блокировки хостингом из-за превышения лимитов;
  • Защитить от ботов, которые злоупотребляют ресурсами.

Без ограничений злоумышленники могут отправлять десятки и сотни запросов в секунду, что приводит к падению производительности или даже остановке сайта.

Способы ограничения запросов в WordPress

1. Использование плагинов

Самый простой способ — воспользоваться готовыми плагинами:

  • WP Limit Login Attempts — ограничивает попытки входа в админ-панель;
  • Wordfence Security — комплексный плагин с функцией ограничения запросов и защитой от ботов;
  • Rate Limiting by WPShop — специализированный плагин для ограничения запросов с гибкими настройками.

Например, Wordfence позволяет задать максимальное количество запросов с одного IP за минуту и автоматически блокирует подозрительные адреса.

2. Ограничение через .htaccess

Если хостинг использует Apache, ограничить количество запросов можно на уровне сервера, добавив правила в файл .htaccess. Например:

SetEnvIfNoCase Request_URI "wp-login\.php" bad_bot=1
Order Allow,Deny
Allow from all
Deny from env=bad_bot

Но для более точного контроля стоит использовать модуль mod_evasive, который может блокировать IP при превышении лимита запросов.

3. Реализация ограничения через код в functions.php

Если нужен кастомный и легкий способ, можно реализовать ограничение запросов через код в теме или плагине. Ниже приведён пример функции wpcourse_limit_requests(), которая блокирует IP, если количество запросов за минуту превышает 30.

function wpcourse_limit_requests() {
    $ip = $_SERVER['REMOTE_ADDR'];
    $transient_key = 'wpcourse_req_count_' . md5($ip);
    $count = (int) get_transient($transient_key);

    if ($count >= 30) {
        wp_die('Слишком много запросов. Попробуйте позже.');
    }

    set_transient($transient_key, $count + 1, 60); // храним счетчик 60 секунд
}
add_action('init', 'wpcourse_limit_requests');

Этот код использует transient API WordPress для хранения количества запросов от каждого IP за последнюю минуту. Если лимит превышен, пользователь получает сообщение об ошибке.

Преимущества и недостатки каждого метода

Плагины

Удобны для новичков, имеют готовые интерфейсы и дополнительные функции безопасности. Недостаток — увеличивают нагрузку на сайт и могут конфликтовать с другими плагинами.

.htaccess и серверные настройки

Работают на уровне сервера, не нагружают PHP. Но требуют доступа к конфигурации хостинга и навыков администрирования. Не всегда доступны на общем хостинге.

Код в functions.php

Легко кастомизировать под свои задачи, не требует дополнительных плагинов. Однако ограничен по возможностям и может быть менее эффективным при большом трафике.

Рекомендации по внедрению

Для большинства сайтов оптимальным будет комбинирование методов:

  • Используйте плагин Wordfence или аналогичный для базовой защиты и мониторинга.
  • При возможности настройте mod_evasive на сервере для защиты на уровне Apache.
  • Добавьте кастомный код, если нужны особые правила и гибкость.

Также рекомендуем регулярно проверять логи сервера и анализировать подозрительный трафик.

Пример интеграции с WPGPT для уведомлений о превышении лимита

Если вы используете плагин WPGPT, можно настроить автоматическую отправку уведомлений администратору при превышении лимита запросов:

function wpcourse_notify_admin_on_limit($ip) {
    if (function_exists('wpgpt_send_message')) {
        $message = "Внимание! IP $ip превысил лимит запросов на сайте.";
        wpgpt_send_message(array(
            'to' => get_option('admin_email'),
            'message' => $message,
            'subject' => 'Превышение лимита запросов'
        ));
    }
}

function wpcourse_limit_requests_with_notify() {
    $ip = $_SERVER['REMOTE_ADDR'];
    $transient_key = 'wpcourse_req_count_' . md5($ip);
    $count = (int) get_transient($transient_key);

    if ($count >= 30) {
        wpcourse_notify_admin_on_limit($ip);
        wp_die('Слишком много запросов. Попробуйте позже.');
    }

    set_transient($transient_key, $count + 1, 60);
}
add_action('init', 'wpcourse_limit_requests_with_notify');

Такой подход поможет оперативно реагировать на подозрительный трафик и защищать сайт.

Как изменить структуру ссылок в WordPress без плагинов
03.03.2026
Автоматическое удаление неоплаченных заказов в WooCommerce
24.05.2026
Как добавить дополнительное поле в форму регистрации WordPress с помощью кода
06.01.2026
Как удалить неиспользуемые шорткоды в WordPress
24.02.2026
Как удалить генератор верстки WordPress без потери функциональности
29.12.2025

Хотите научиться создавать сайты и зарабатывать на этом от 30 000 рублей в месяц?

Записаться на курс сейчас