429 — превышена частота запросов: Ошибка 429 Too Many Requests — как исправить ошибку

Содержание

Как разрешить запросы с ограничением скорости (429 слишком много запросов)

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

Большинство из этих методов ограничения скорости применяются только к ботам, но, чтобы избежать истощения FPM-воркеров, мы внедрили механизм ограничения скорости для каждого IP-адреса, чтобы предотвратить исчерпание доступных FPM-воркеров одним IP-адресом.

В этой статье объясняются различия между различными методами ограничения скорости и показано, как найти применимый метод ограничения скорости и, при необходимости, как их переопределить.

СОДЕРЖАНИЕ

  • Методы ограничения скорости
    • Определение метода ограничения прикладной скорости
  • Ограничение скорости для ботов и сканеров
    • . Повторная скорость
    • . Добавление в белый список дополнительных пользовательских агентов

    • Плагины и поставщики услуг с известным ограничением скорости
  • Ограничение скорости на IP-адрес
    • Исключение IP-адресов из ограничения скорости на IP-адрес
    • Отключить ограничение скорости для каждого IP-адреса
    • Исключить определенные URL-адреса из механизма ограничения скорости для каждого IP-адреса два метода ограничения скорости и, следовательно, так называемые зоны :  

      • Ограничение скорости на основе пользовательских агентов и запросов в секунду (зона ботов )
      • Ограничение скорости на основе запросов на IP-адрес (зона zoneperip )

      Оба метода реализованы с помощью этого модуля

      Определение примененного метода ограничения скорости Методы ограничения скорости — это сообщение, которое будет зарегистрировано в журнале ошибок Nginx.

      Для этого вы сначала ищете запрос в журналах доступа, что можно сделать с помощью журнала hypernode-parse-nginx ( pnl ) команда: pnl --today --fields time,status,remote_addr,request --filter status=429

      Скопируйте IP-адрес из вывода, сгенерированного этой командой, и найдите соответствующую запись журнала в вышеупомянутый журнал ошибок Nginx с cat /var/log/nginx/error.log | grep "1.2.3.4"  

      Эти записи выглядят следующим образом:

      Запись журнала, в которой применяется ограничение скорости для агентов пользователя и запросов в секунду (на основе зоны ботов ):

       15.08.2016 18:25:54 [ошибка] 11372#11372: *45252 ограничение запросов, превышение: 0,586 по зоне "боты", клиент: 1.2.3.4, сервер: , запрос: "GET /azie/flip .html HTTP/1.1", хост: "www.example.nl" 

      Запись в журнале, в которой ограничение скорости применяется для каждого IP-адреса (на основе зоны zoneperip ):

       12/08/2016 10:23 :39 [ошибка] 25118#25118: *24362 ограничение соединений по зоне "zoneperip", клиент: 1. 2.3.4, сервер: , запрос: "GET /index.php/admin/abcdef/HTTP/1.1", хост: "www .example.nl", реферер: "http://example.nl/index.php/admin/abcdef/" 

      Примечание. Ограничение скорости для каждого IP-адреса применяется только к запросам, обрабатываемым PHP, а не к статическому содержимому.

      Ограничение скорости для ботов и поисковых роботов

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

      Отклонение с 429 слишком большим количеством запросов

      Поскольку наша цель не в том, чтобы заблокировать ботов, а в том, чтобы красиво ограничить их скорость, мы должны быть очень осторожны с тем, как мы их отклоняем. Таким образом, лучший способ отклонить их — это сообщение 429 Too Many Requests . Это сообщает посещающему боту, что сайт есть, но сервер в данный момент недоступен. Это временное состояние, поэтому они могут повторить попытку позже. Это не оказывает негативного влияния на ранжирование в любой поисковой системе, так как сайт находится там, когда бот подключается позже.

      Как настроить ограничитель скорости

      По умолчанию некоторые боты освобождены от ограничения скорости, например: Google, Bing и некоторые системы мониторинга. Скорость этих ботов никогда не ограничивается, поскольку они обычно соблюдают robots. txt. Однако есть также боты, которые не следуют инструкциям, приведенным в файле robots.txt, или просто используются злоумышленниками. Скорость этих ботов будет ограничена одним запросом в секунду. Любые запросы сверх этого предела будут возвращать ошибку 429. Если вы хотите, вы можете переопределить общесистемную конфигурацию того, кто будет заблокирован, а кто нет. Для начала поместите следующее в файл конфигурации с именем /data/web/nginx/http.ratelimit :

       карта $http_user_agent $limit_bots {
          дефолт '';
          ~*(google|bing|heartbeat|uptimerobot|shoppimon|facebookexternal|monitis.com|Zend_Http_Client|magereport.com|SendCloud|Adyen|contentkingapp|GuzzleHttp|Mollie) '';
          ~*(http|crawler|spider|bot|search|Wget/|Python-urllib|PHPCrawl|bGenius|MauiBot) 'bot';
      }
       

      Примечание: не удаляйте запись пульса! Так как это нарушит мониторинг вашего Hypernode

      Как видите, это сортирует всех посетителей на две группы:

      • В первой строке (белого списка) вы найдете ключевые слова, на которые не распространяется ограничение скорости, например: «google», «bing», «heartbeat» или «monitis. com».
      • Во второй строке (черный список) вы найдете ключевое слово для общих и оскорбительных ботов и сканеров, скорость которых всегда будет ограничена, например: сканер, паук, бот

      Ключевые слова разделены с помощью | символов, так как это регулярное выражение.

      Добавление в белый список дополнительных пользовательских агентов

      Чтобы расширить белый список, сначала определите, какой пользовательский агент вы хотите добавить. Используйте файлы журнала доступа, чтобы увидеть, какие боты заблокированы и какую идентификацию агента пользователя они используют. Скажем, бот, которого мы хотим добавить, имеет User Agent SpecialSnowflakeCrawler 3.1.4 . Который содержит слово «искатель», поэтому он соответствует второму регулярному выражению и помечен как бот. Поскольку строка белого списка имеет приоритет над строкой черного списка, лучший способ разрешить этому боту — добавить его пользовательский агент в белый список, а не удалять «сканера» из черного списка:

       карта $http_user_agent $limit_bots {
          дефолт '';
          ~*(specialsnowflakecrawler|google|bing|heartbeat|uptimerobot|shoppimon|facebookexternal|monitis. com|Zend_Http_Client|magereport.com|SendCloud|Adyen|contentkingapp|GuzzleHttp) '';
          ~*(http|crawler|spider|bot|search|Wget/|Python-urllib|PHPCrawl|bGenius|MauiBot) 'bot';
      }
       

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

      Известные подключаемые модули и поставщики услуг с ограниченной скоростью

      Есть несколько подключаемых модулей и поставщиков услуг, которые, как правило, попадают в черный список ключевых слов во фрагменте кода http.ratelimit , и поэтому, возможно, их необходимо исключить по отдельности. Ниже мы перечислили их и их пользовательские агенты для вашего удобства. Adyen HttpClient 1.0

    • MailPlus — Jersey/2.23.1
    • Mollie — Mollie.nl HTTP client/1.0
    • Screaming — Screaming Frog SEO Spider

    Beside above known plugins that will hit the ключевое слово из черного списка в http.ratelimit мы знаем, что Picqer также столкнется с ограничителем скорости из-за того, что он заблокирован « zoneperip ». Пожалуйста, найдите здесь IP-адреса Picqer. Вы можете исключить попадание этих IP-адресов в ограничитель скорости, если будете следовать инструкциям.

    Ограничение скорости для каждого IP-адреса

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

    Обратите внимание: , если у вас включены виртуальные хосты, управляемые Hypernode, добавьте только файл http.conn_ratelimit в корень Nginx. Не добавляйте его также к конкретному виртуальному хосту, так как эти файлы будут компенсировать друг друга.

    Исключение IP-адресов из ограничения скорости для каждого IP-адреса

    В некоторых случаях может потребоваться исключить определенные IP-адреса из ограничения скорости для каждого IP-адреса. Если вы хотите исключить IP-адрес, вы можете сделать это, создав файл конфигурации с именем /data/web/nginx/http.conn_ratelimit 9.0048 со следующим содержимым:

     гео $conn_limit_map {
        по умолчанию $remote_addr;
        1. 2.3.4'';
    }
     

    В этом примере мы исключили IP-адрес 1.2.3.4 , установив пустое значение в виде '' .

    Помимо внесения в белый список одного IP-адреса, также можно внести в белый список целый диапазон IP-адресов. Вы можете сделать это, используя так называемую нотацию CIDR (например, 10.0.0.0/24, чтобы внести в белый список все IP-адреса в диапазоне от 10.0.0.0 до 10.0.0.255). В этом случае вы можете использовать следующий фрагмент в /data/web/nginx/http.conn_ratelimit вместо:

     geo $conn_limit_map {
        по умолчанию $remote_addr;
        10.0.0.0/24'';
    }
     

    Отключить ограничение скорости для каждого IP-адреса

    Когда производительность вашего магазина очень низкая, возможно, все ваши работники FPM заняты просто обслуживанием обычного трафика. Обработка заявки занимает столько времени, что все рабочие постоянно истощаются из-за небольшого количества посетителей. Если возникает такая ситуация, мы настоятельно рекомендуем оптимизировать ваш магазин для повышения скорости и временного обновления до большего узла при этом. Отключение ограничения скорости не решит эту проблему, а только изменит сообщение об ошибке с Слишком много запросов ошибка к ошибке тайм-аута.

    Однако для целей отладки может быть полезно отключить ограничение количества подключений для каждого IP-адреса для всех IP-адресов. С помощью следующего фрагмента в /data/web/nginx/http.conn_ratelimit можно полностью отключить ограничение скорости на основе IP:

     geo $conn_limit_map {
        дефолт '';
    }
     

    Предупреждение. Используйте этот параметр только для целей отладки! Крайне не рекомендуется использовать этот параметр на производственных гиперузлах, так как ваш магазин может быть легко отключен одним IP-адресом с использованием медленных и/или флуд-атак. 9\/elasticsearch. php$) {
    установить $ratelimit_request_url '';
    }

    В приведенном выше примере URL-адреса */rest/V1/example-call/* и /elasticsearch.php должны быть исключены. Теперь вы можете использовать переменную $ratelimit_request в файле /data/web/nginx/http.conn_ratelimit (см. пример ниже), чтобы исключить эти URL-адреса из ограничителя скорости и убедиться, что боты и сканеры по-прежнему будут оценивать ограничено в зависимости от их пользовательского агента.

     гео $conn_limit_map {
        по умолчанию $ratelimit_request_url;
    }
     

    Как предоставить пользовательскую статическую страницу ошибок для IP-адресов с ограниченным рейтингом

    Если вы хотите, вы можете предоставить пользовательскую страницу ошибок для IP-адресов с ограниченным рейтингом. Просто создайте статический файл HTML в /data/web/public с любым содержимым, которое вы хотите показать этим IP-адресам с ограниченной скоростью. Кроме того, вам необходимо создать файл конфигурации Nginx с именем /data/web/nginx/server.custom_429. тоже. Содержимое этого файла должно быть следующим:

     error_page 429 /ratelimited.html;
    местоположение = /ratelimited.html {
        корень /данные/веб/общедоступный;
        внутренний;
    }
     

    Этот фрагмент кода будет передавать пользовательский статический файл с именем ratelimited.html на IP-адреса, которые используют слишком много PHP-воркеров.

    Предупреждение. Используйте только статическую (HTML) страницу, поскольку создание PHP-скрипта для отображения ошибки также будет ограничено по скорости, что приведет к бесконечному циклу.

    Найдите вызов API AWS, вызывающий ошибки «Превышение скорости»

    Последнее обновление: 09 февраля 2022 г.

    Я получаю сообщение об ошибке «Превышена скорость» при попытке создать, обновить или получить доступ к сервису AWS. Как определить, какой вызов AWS API вызывает ошибку?

    Краткое описание

    Чтобы определить, какой вызов API вызывает ошибку Превышение скорости в вашей учетной записи AWS, выполните следующие действия:

    1.    Создайте таблицу Amazon Athena для журналов AWS CloudTrail.

    2.    Выполните запрос к Amazon Athena, чтобы найти вызов API, связанный с ошибкой . Частота превышена .

    Информацию об устранении проблемы см. в разделе Устранение неполадок Превышение частоты ошибок на основе связанного вызова API и службы AWS в этой статье.

    Примечание. Чтобы регистрировать активность API в своей учетной записи AWS, необходимо сначала создать отслеживание в CloudTrail. Любые события данных, которые происходят в вашей учетной записи до создания следа, не регистрируются следом.

    Разрешение

    Создайте таблицу Amazon Athena для журналов CloudTrail

    Создайте и запустите запрос Athena, чтобы найти соответствующий вызов API

    .

    1.    Откройте консоль Athena.

    2.    Выберите вкладку Новый запрос .

    3.    Скопируйте и вставьте следующий пример запроса в текстовое поле запроса, а затем выберите Выполнить запрос :

    Важно: Заменить cloudtrail-table-name с именем вашей таблицы CloudTrail.

     выберите имя события, код ошибки, источник события, регион aws, пользовательский агент, счет COUNT (*)
    ОТ имя-таблицы-облака
    где код ошибки = 'ThrottlingException'
    И время события между '2018-10-14T03:00:08Z' и '2018-10-23T07:15:08Z'
    группировка по коду ошибки, awsregion, источнику событий, агенту пользователя, имени события
    порядок по количеству desc; 

    4.    В выходных данных запроса определите вызовы API, перечисленные в имя события и источник события , которые связаны с код ошибки , "ThrottlingException".

    Для устранения ошибок превышения скорости на основе связанного вызова API и службы AWS

    Примечание. Превышение скорости ошибки могут возникать при различных условиях регулирования в зависимости от используемого сервиса AWS и вызова API.

    См. следующую документацию по устранению неполадок для вызова API и службы, связанных с ошибкой Превышение скорости , которую вы получаете:

    Для вызовов API GetResourceConfigHistory или ListDiscoveredResources

    См. Как устранить неполадки, связанные с сообщениями об ошибках консоли AWS Config?

    Для вызова API PutMetricData

    См. Как избежать регулирования при вызове PutMetricData в API CloudWatch?

    Для вызовов API, связанных с AWS Auto Scaling

    See My Auto Scaling API вызовы регулируются. Что я могу сделать, чтобы избежать этого?

    Для вызовов API, связанных с функцией AWS Lambda

    См. Как устранить неполадки регулирования функции Lambda с ошибками «Превышение скорости» и 429 «TooManyRequestsException»?

    Для вызовов API, связанных с AWS Elastic Beanstalk

    См. Как устранить ошибки регулирования API или «Превышение скорости» в Elastic Beanstalk?

    Примечание. Вы также можете разрешить повтор вызовов API AWS после регулирования, добавив оператор ожидания. Дополнительные сведения см. в разделе Повторные попытки при ошибках и экспоненциальная отсрочка в AWS.


    Как автоматически создавать таблицы в Amazon Athena для поиска в журналах AWS CloudTrail?

    Помогла ли эта статья?

    Отправить отзыв


    Вам нужна техническая поддержка или выставление счетов?

    Обратитесь в службу поддержки AWS

    Войдите в консоль

    Узнайте об AWS

    • Что такое AWS?
    • Что такое облачные вычисления?
    • AWS Разнообразие, равенство и инклюзивность
    • Что такое DevOps?
    • Что такое контейнер?
    • Что такое озеро данных?
    • Облачная безопасность AWS
    • Что нового
    • Блоги
    • Пресс-релизы

    Ресурсы для AWS

    • Начало работы
    • Обучение и сертификация
    • Портфель решений AWS
    • Архитектурный центр
    • Часто задаваемые вопросы по продуктам и техническим вопросам
    • Аналитические отчеты
    • Партнеры AWS

    Разработчики на AWS

    • Центр разработчиков
    • SDK и инструменты
    • .