Превышение лимитов нагрузки

Подробности статьи
Ссылка: https://support.ihc.ru/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=283
Cтатья №: 283
Создано: 03.03.2017 17:59

Ответ

Если вы получили письмо с уведомлением о превышении лимитов нагрузки, данная статья точно будет для вас полезной. Представляем вам обзор самых популярных причин нагрузки и варианты решения проблемы:

1. Длительное выполнение скриптов на версиях php ниже 5.6

Если CMS обновлена, рекомендуем повысить версию php до 5.6 или выше. Это может привести к сокращению времени выполнения скрипта и к снижению нагрузки. Также рекомендуется попробовать использовать версию php 7.0, если она поддерживается скриптами вашего сайта.

2. Использование злоумышленниками xmlrpc.php вашего сайта для организации DDoS-атак.

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

Решение:
Для устранения данной проблемы рекомендуем либо удалить файл xmlrpc.php, либо в файле .htaccess, который расположен в корне сайта, добавить следующие строки:

<FilesMatch "xmlrpc.php">
order deny,allow
deny from all
</FilesMatch>


3. Индексирование сайта поисковыми ботами.

Процесс индексации сайта с большим количеством страниц может занимать длительное время и создавать большую нагрузку на сервере.
Поисковые боты при индексации посылают одновременно огромное количество запросов вашему сайту, что и приводит к проблеме. Поисковых роботов существует достаточно много (Google, Yahoo, Yandex, Mail.RU, …), и ограничивать им доступ к сайту полностью (т.к. они приносят пользу вашему ресурсу) некорректно.

Решение:
Создать файл robots.txt в директории вашего сайта, прописав в него следующие параметры:

User-agent: *
 Crawl-delay: 10

( User-agent - указывает для какой поисковой системы использовать заданные параметры. Crawl-delay - указывает временной интервал, с которым поисковые системы будут загружать страницы сайта. )

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

User-agent: *
 Disallow: /administrator/
 Disallow: /cache/
 Disallow: /cli/
 Disallow: /components/
 Disallow: /images/
 Disallow: /includes/
 Disallow: /installation/
 Disallow: /language/
 Disallow: /libraries/
 Disallow: /logs/
 Disallow: /media/
 Disallow: /modules/
 Disallow: /plugins/
 Disallow: /templates/
 Disallow: /tmp/

Индексацию нежелательных ботов вы можете запретить в robots.txt:

User-agent: bingbot
 Disallow: /

Также вы можете запретить индексацию и в .htaccess:

SetEnvIfNoCase User-Agent "^bingbot" search_bot

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

10.20.18.204 - - [08/Feb/2017:12:05:01 +0200] "GET ваш_сайт/ HTTP/1.0" 200 93488 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"
 10.20.18.204- - [08/Feb/2017:12:05:01 +0200] "GET ваш_сайт/ HTTP/1.0" 200 110513 "-" "Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)"

Корректное название робота: bingbot/2.0
Если бы мы его хотели заблокировать в .htaccess, правило выглядело бы так:

SetEnvIfNoCase User-Agent bingbot/2.0 bad_bot
Order Allow,Deny
Allow from all
Deny from env=bad_bot

Если ранее приведенные варианты блокировки не решили проблему, тогда можно заблокировать поисковым ботам доступ к сайту по IP, прописав в .htaccess:

Deny from 10.20.18.204

где 10.20.18.204 — IP bingbot, который мы нашли в логах доступа.

4. Подбор пароля от админ-панели сайта (брутфорс-атака)

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

Решение:
1) Подключить дополнительную авторизацию, к примеру с помощью файлов .htaccess и .htpasswd.
Необходимо создать файл с названием ".htpasswd" в корне директории сайта и при помощи сайта http://www.htaccesstools.com/htpasswd-generator/ сгенерировать его содержание, указав желаемый логин и пароль.

Для Joomla в файл ".htaccess" в папке /administrator/ добавить следующие строки:

 AuthName "Access Denied"
 AuthType Basic
 AuthUserFile полный_путь_до_корня_сайта/.htpasswd
 require valid-user

Для WordPress в файл ".htaccess", в корневой директории сайта, добавить следующие строки:

 AuthUserFile .htpasswd
 AuthName "Private access"
 AuthType Basic
 <FilesMatch "wp-login.php">
 Require valid-user
 </FilesMatch>

где "полный_путь_до_корня_сайта" - это абсолютный путь от корня файловой системы.

2) Изменить стандартный адрес админ-панели вашего сайта.
3) Ограничить доступ к админ-панели сайта по ip-адресу.

Общие рекомендации:

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

2. Используйте кэширующие плагины.
В результате вы получите не только ускорение загрузки страниц сайта, но и снижение нагрузки.

3. Рекомендуем подключить одно из данных расширений: XCache, APC, OPCache.
Это поможет сократить время выполнения PHP скриптов, соответственно и снизит нагрузку.

4. Защитить формы обратной связи с помощью CAPTCHA.
Это вам поможет как избежать массовой рассылки, так и защитит вашу базы от заполнения ненужной информацией, соответсвенно и от увеличения в объемах.

5. Удалить старые записи, такие как комментарии и пр. из базы данных.
Это поможет уменьшить размер базы данных, соответственно сократит время запроса к ней.

6. Для сайтов на WordPress отключить перенаправления, при запросе к контенту внутри директории wp-content/.
Так как при включенном ЧПУ уведомление о несуществующем контенте обрабатывает сам WordPress, а не сервер, данные запросы могут быть причиной повышенной нагрузки. Для устранения данной проблемы вы можете либо отключить ЧПУ, либо запретить обработку подобных уведомлений для директории wp-content/. Если отключать ЧПУ не намерены, тогда в файле .htaccess, который расположен в корне директории wp-content/, необходимо прописать данное правило:

RewriteEngine Off