Сегодня утром один из моих клиентов написал что всю ночь сайт не отвечает, а сейчас открывается по 20 секунд. Идем разбираться - с местом на сервер все в порядке, с настройками тоже, но загрузка всех ядер 100% и не думает падать. В логах очень много хитов, прямо таки аномально много, сайт не такой популярный) В итоге в логах вижу строчки огромной боли многих веб-мастеров - UserAgent: YandexBot 3.0. Бот прямо таки ненасытен - генерирует по 20-30 хитов в секунду. ЧТобы проверить действительно ли он "виновник происшествия" - блокирую в nginx все подключения с UserAget YandexBot. Для этого в блоке server конфигурации nginx прописываю:
if ($http_user_agent ~* (YandexBot)) {
return 403;
}
Нагрузка через некоторое время спадает, яндекс вебмастер начинает "плеваться" ошибками индексации в почту. Устанавливаю в панели Яндекс Вебмастер параметр "Скорость обхода сайта" на 1 запрос в секунду. УБираю блок в nginx. Загрузка снова растет до 100%, все ложится. То есть видимо параметр применится только на следующий обход. Смотрим что еще можно сделать чтобы умерить аппетиты Яндекса. На странице https://yandex.ru/support/webmaster/ro...obots.html нахожу еще одно решение - возвращать на все запросы код HTTP код 429. Прописываю в ini.php: http_response_code(429); Жду пару минут. Нагрузка спадает до нормальных значений. Но возвращать на каждый хит 429 как-то не правильно. То есть возвращать нам его нужно только когда высокая загрузка системы и возвращать только поисковым ботам. Реальному посетителю мы должны открыть сайт в любом случае с нормальными ответами. Набросал вот такой код и добавил в init.php:
Для определения мгновенной загрузки использую стандартную функцию sys_getloadavg. Так как на сервер 2 вычислительных ядра, нагрузка больше 2 это уже перегруз, в этом случае ничего не делаем и выдаем ошибку. Если же загрузка более 0.8 - просто выдаем код 429 и контент. В таком варианте работает сейчас. Значения порогов подбираете на вашем железе экспериментально.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».