Если вы получили письмо с уведомлением о превышении лимитов нагрузки, данная статья точно будет для вас полезной. Представляем вам обзор самых популярных причин нагрузки и варианты решения проблемы:
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