Что такое ошибка 509

Внешний вид ошибки 509 в браузере
Ошибка 509 Bandwidth Limit Exceeded — это HTTP-статус, который возвращает сервер или промежуточный сервис (CDN) при блокировке запросов из-за превышения установленного лимита трафика или частоты запросов. Вместо контента пользователь видит сообщение:
509 Bandwidth Limit Exceeded
Эта ошибка не является стандартной для протокола HTTP/1.1 (официально не кодируется в RFC), но широко используется провайдерами и CDN как кастомный статус для обозначения ограничения по ресурсам.
Причины возникновения ошибки 509
Ошибка 509 возникает на уровне инфраструктуры, а не приложения. Основные причины:
- Исчерпание лимита трафика на хостинге. На shared-хостингах часто действуют жёсткие квоты (например, 100 ГБ/месяц). При их превышении хостинг блокирует доступ до начала следующего отчётного периода.
- Активация защиты CDN от атак. Сервисы вроде Cloudflare автоматически включают блокировку при обнаружении всплеска трафика, который может указывать на DDoS или сканирование.
- Слишком строгие настройки rate limiting. На веб-сервере (nginx, Apache) или в WAF могут быть установлены низкие пороги (например, 5 запросов/сек на IP), которые срабатывают на легитимном трафике.
- Злоупотребление ресурсами со стороны сайта. Некорректный плагин, бесконечный цикл в коде или неоптимизированные запросы к базе данных могут генерировать огромное число внутренних запросов, исчерпав лимит.
- Целенаправленная атака. DDoS-атака или ботнет могут создавать тысячи запросов в секунду, мгновенно превышая любые разумные лимиты.
Как исправить ошибку 509: пошаговая инструкция
Шаг 1: Определите источник ошибки
Первым делом выясните, кто именно возвращает ошибку 509: ваш хостинг, CDN или веб-сервер.
- Проверьте HTTP-заголовки ответа. Откройте DevTools в браузере (F12), перейдите на вкладку Network, обновите страницу и найдите запрос, вернувший 509. Изучите заголовки:
Server: cloudflare— ошибка от Cloudflare.Server: nginxилиApache— возможно, сработал rate limiting на вашем сервере.- Заголовки вроде
X-Cache: ErrorилиX-Host:часто содержат информацию о промежуточных сервисах.
- Используйте команду
curl. Запуститеcurl -I https://ваш-сайт.ruв терминале. В выводе будут все заголовки. - Проверьте логи. В панели хостинга найдите раздел с логами (Logs, Access Logs). Если ошибка генерируется хостингом, там будет соответствующая запись. Для доступа по SSH логи обычно находятся в
/var/log/nginx/(access.log, error.log) или/var/log/apache2/.
Шаг 2: Проверьте и при необходимости увеличьте лимиты хостинга
Если источник — хостинг, значит, исчерпан лимит трафика по тарифу.
- Войдите в панель управления хостингом (cPanel, Plesk, ISPManager).
- Найдите раздел Traffic, Bandwidth Usage или Statistics.
- Посмотрите график или цифры за текущий месяц/день. Сравните с лимитом вашего тарифа.
- Если лимит превышен:
- Временное решение: В некоторых панелях (например, cPanel) можно временно увеличить лимит в настройках. Если такой опции нет, срочно обратитесь в поддержку хостинга и попросите снять блокировку до конца отчётного периода (это часто платная услуга).
- Долгосрочное решение: Рассмотрите переход на тариф с более высоким или неограниченным трафиком (VPS, выделенный сервер). На shared-хостинге лимиты обычно жёсткие.
- После снятия блокировки проверьте, работает ли сайт. Очистите кэш браузера и, если используете, кэш сайта/CDN.
💡 Совет: Настройте в панели хостинга уведомления по email при достижении 80-90% лимита. Это даст время на реакцию.
Шаг 3: Настройте rate limiting в веб-сервере
Если проблема в бот-трафике или слишком агрессивных настройках сервера, ужесточите или, наоборот, смягчите лимиты.
Для nginx:
- Откройте конфигурационный файл виртуального хоста (обычно
/etc/nginx/sites-available/ваш-сайт). - В блоке
http(глобально) илиserver(для конкретного сайта) определите зону ограничения. Параметры:$binary_remote_addr— ключ, по которому считается трафик (IP-адрес в бинарном виде).zone=perip:10m— имя зоны и размер памяти (10М хватит на ~160 тыс. IP).rate=10r/s— базовый лимит (10 запросов в секунду на один IP).
http { limit_req_zone $binary_remote_addr zone=perip:10m rate=10r/s; } - В блоке
location, который нужно защитить (частоlocation /), примените зону:location / { limit_req zone=perip burst=20 nodelay; # ... остальные директивы (proxy_pass, root и т.д.) }burst=20— разрешает короткие всплески до 20 запросов.nodelay— не задерживать запросы в очереди, а сразу отклонять превышающие.
- Проверьте синтаксис:
sudo nginx -t. - Перезагрузите конфигурацию:
sudo systemctl reload nginx.

Пример настройки rate limiting в nginx
Для Apache (с модулем mod_evasive):
- Убедитесь, что модуль активен:
sudo a2enmod evasive. - Отредактируйте конфиг модуля (обычно
/etc/apache2/mods-available/evasive.conf):
Начните с<IfModule mod_evasive20.c> DOSHashTableSize 3097 DOSPageCount 2 # Макс. запросов к одной странице за интервал DOSSiteCount 50 # Макс. запросов к сайту за интервал DOSPageInterval 1 # Интервал для DOSPageCount (секунды) DOSSiteInterval 1 # Интервал для DOSSiteCount (секунды) DOSBlockingPeriod 10 # Блокировка на 10 секунд </IfModule>DOSSiteCount 50иDOSSiteInterval 1(50 запросов/сек на весь сайт). Регулируйте под свою нагрузку. - Перезагрузите Apache:
sudo systemctl reload apache2.
Шаг 4: Настройте защиту в CDN
Если источник ошибки — CDN (Cloudflare, Sucuri), настройте его правила безопасности.
Cloudflare:
- Войдите в панель Cloudflare, выберите домен.
- Быстрая защита: в разделе Security → Settings установите Security Level на Medium или High. Это активирует более строгую проверку JavaScript и Challenge для подозрительного трафика.
- Точный контроль: перейдите в Security → WAF.
- На вкладке Rate limiting нажмите Create rate limiting rule.
- Укажите URL (например,
/wp-login.php,/xmlrpc.phpили*для всего сайта). - Задайте Limit (например, 10 запросов) и Period (1 минута).
- В Action выберите Block (блокировать) или Challenge (показывать капчу).
- Сохраните правило.
- Дайте 5-10 минут на распространение правил, проверьте сайт.

Настройка правила Rate Limiting в Cloudflare
Sucuri:
- В панели Sucuri перейдите в Firewall → Settings.
- Найдите раздел Rate Limiting.
- Установите лимиты на количество запросов к сайту за минуту/час. Рекомендуемые значения: 60-100 запросов/минуту на IP для начала.
- Сохраните настройки.
⚠️ Важно: Слишком низкие лимиты (например, 1-2 запроса/сек) могут блокировать обычных пользователей при быстром клике или загрузке страницы с множеством ресурсов. Тестируйте изменения.
Шаг 5: Оптимизируйте сайт и проверьте плагины
Часто ошибка 509 — симптом неоптимальной работы сайта, который генерирует избыточные запросы.
- Уменьшите количество HTTP-запросов:
- Объедините CSS и JavaScript файлы.
- Используйте CSS-спрайты для иконок.
- Включите ленивую загрузку (lazy load) для изображений.
- Включите сжатие и кэширование на сервере:
- gzip/Brotli: в nginx добавьте
gzip on;иbrotli on;в конфиг. - Кэширование статики: задайте заголовки
Cache-Control: max-age=31536000для изображений, CSS, JS.
- gzip/Brotli: в nginx добавьте
- Проверьте плагины/модули CMS (особенно для WordPress, Joomla):
- Временно отключите все плагины через админку.
- Проверьте, исчезла ли ошибка 509.
- Включайте плагины по одному, чтобы найти виновника. Частые "кандидаты": плагины статистики, анти-спама, AJAX-виджеты, плагины для оптимизации изображений "на лету".
- Обновите найденный проблемный плагин или найдите альтернативу.
- Аудит базы данных: для WordPress используйте плагины типа WP-Optimize, чтобы очистить транзиенты, спам-комментарии и оптимизировать таблицы.
Профилактика повторения ошибки 509
- Мониторинг трафика и уведомления:
- Используйте аналитику (Google Analytics, Matomo) и инструменты хостинга.
- Настройте алерты (через сервисы вроде UptimeRobot или встроенные в Cloudflare) при достижении 80% лимита трафика или резком росте запросов.
- Регулярный анализ логов:
- Еженедельно проверяйте топ IP по числу запросов:
sudo cat /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -nr | head -20. - Ищите подозрительные User-Agent (например,
masscan,zgrab,sqlmap) или частые запросы к/wp-login.php,/xmlrpc.php.
- Еженедельно проверяйте топ IP по числу запросов:
- Используйте CDN с защитой от DDoS:
- Даже бесплатный план Cloudflare предоставляет базовую защиту. Включите Bot Fight Mode.
- При реальных атаках активируйте Under Attack Mode (Cloudflare) — он показывает JavaScript Challenge для всех посетителей на 5 минут.
- Оптимизируйте контент:
- Сжимайте изображения до загрузки (TinyPNG, ImageOptim).
- Минифицируйте CSS/JS (плагины для CMS или инструменты вроде UglifyJS).
- Настройте длительное кэширование для статических ресурсов.
- Обновляйте всё ПО:
- CMS, темы, плагины, веб-сервер (nginx/Apache). Устаревшее ПО часто содержит уязвимости, которые используют для создания бот-сетей.
Когда обращаться к поддержке хостинга
Если настройки rate limiting и CDN не помогают, а лимиты хостинга не исчерпаны, проблема может быть глубже (например, в сетевой инфраструктуре провайдера). В этом случае:
- Соберите данные:
- Точное время и длительность ошибки.
- Скриншот ошибки из браузера.
- Вывод команды
curl -Iи ключевые строки из логов (access.log, error.log) за период ошибки. - Результаты диагностики (какой источник определён: хостинг/CDN/сервер).
- Сформулируйте запрос в поддержку:
- "На сайте возвращается ошибка 509. Источник, судя по заголовкам, — ваш хостинг/сервер."
- "Проверьте, пожалуйста, не превышены ли лимиты по трафику/запросам на моём тарифе укажите название?"
- "Есть ли в логах записи о блокировке по rule название правила, если настраивали?"
- "Можно ли временно снять блокировку и получить расширенные логи для анализа?"
- Что может сделать поддержка:
- Снять временную блокировку.
- Предложить более подходящий тариф.
- Настроить на стороне инфраструктуры более гибкие лимиты (если это возможно по тарифу).
- Дать доступ к расширенным логам (например, через Log Manager в cPanel).
Если хостинг не может или не хочет решать проблему, а сайт критичен для бизнеса, рассмотрите миграцию на провайдера с прозрачными лимитами и качественной поддержкой.