Сайт создает высокую нагрузку на сервер - наверное вам приходилось слышать эти слова от вашего хостера, от нагрузки никуда не уйдешь, но ее можно уменьшить, причем очень заметно. И уменьшая нагрузку на сервер, создаваемую сайтом - вы уменьшаете свои затраты на хостинг, vds, аренду выделенного сервера.
Далее хочу рассказать о методах, позволяющих снизить нагрузку до 90% от первоначальной. При этом вам не понадобятся знания администрирования сервера, root доступ к серверу и знание прочих "высоких технологий", все будем делаться на пользовательском уровне.
Для начала разберемся что такое нагрузка и откуда она берется. Под нагрузкой понимается высокий расход оперативной памяти сервером, нагрузка на процессор (процессорное время), а также нагрузка на интернет канал. Вот эти параметры мы и будем разгружать. Кто создает нагрузку? Нет, не посетители!
На среднестатистическом сайте посетители (люди) создают процентов 5-10 нагрузки, остальные ресурсы съедают боты (поисковые и прочие). Вот в отношении их мы и будем наводить порядок, наша задача будет состоять в том, чтоб на сайт не ходили "плохие и бесполезные" боты, т.е. уменьшаем по максимуму реальную (ботовую) посещаемость сайта...
Для наглядности подсчета будем считать исходную нагрузку 100 условных пунктов. Кстати, все выводы, проценты и наблюдения были сделаны после 3 месяцев наблюдения (и экспериментов) за примерно 200 сайтами. Также хочу уточнить, что чем больше на сайте страниц и чем сайт старше и раскрученнее - тем больше на нем ботовая посещаемость и рекомендации описание ниже будут давать более заметный эффект.
1) Первый способ снижения нагрузки - определиться с главным зеркалом сайта. Скорей всего ваш сайт доступен по двум адресам - с www и без. Большинство ботов (кроме самых умных - Яндекса и Гугла) считают что это два разных сайта, а значит и выкачивают ваш сайт по два раза. Наша задача - решить какой URL сайта оставлять, а с какого сделать 301 редирект на главное зеркало.
Для примера идем по ссылке вида: http://webmaster.yandex.ru/check.xml?hostname=www.soft-arhiv.com (вместо www.soft-arhiv.com поставить ваш сайт) и видим: Сайт является зеркалом soft-arhiv.com. Значит в нашем случае будем делать главным зеркалом домен soft-arhiv.com, а с www.soft-arhiv.com сделаем 301 редирект. Редирект этот делается с помощью .htaccess
Если вы желаете, чтоб главным доменом был сайт без www, то в .htaccess который лежит у вас в корне (если его там не лежит, то создать) пишите такое:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^www.soft-arhiv.com$ [NC]
RewriteRule ^(.*)$ https://soft-arhiv.com/$1 [R=301,L]
Вместо soft-arhiv.com естественно прописать нужно ваш сайт. Адрес с www достаточно быстро переклеится на вид без www, все SEO показатели также склеятся (суммируются) достаточно быстро.
Если вашим главным доменом будет домен с www - то в .htaccess писать:
RewriteEngine on
RewriteCond %{HTTP_HOST} ^soft-arhiv.com$ [NC]
RewriteRule ^(.*)$ https://www.soft-arhiv.com/$1 [R=301,L]
Также не забывайте указать главный домен в файле robots.txt. Такая принудительная склейка зеркал заметно снижает посещаемость сайта ботами (им теперь не нужно по 2 раза выкачивать один и тот же сайт), в среднем это снимет 20 пунктов нагрузки с сайта.
2) Второй способ - robots.txt, в него обязательно прописать (для яндекса) главный домен, а также (для всех ботов) закрыть от индексации все бесполезные страницы (часто это страницы списка пользователей, внутренние дубли страниц, поиск по сайту, страницы тегов, pda и print версии сайта и т.п.). Если таких "мусорных" страниц на вашем сайте было много - то и нагрузка снизится заметно.
3) Третий способ оптимизации - "именной бан". Достаточно действенный способ, с помощью .htaccess блокируем полностью доступ к сайту ботам по их именам. Для этого в самом начале файла .htaccess прописываем:
Блокировка по USER AGENT
SetEnvIfNoCase User-Agent "Python" bot
SetEnvIfNoCase User-Agent "Baiduspider" bot
SetEnvIfNoCase User-Agent "package" bot
SetEnvIfNoCase User-Agent "Wget" bot
SetEnvIfNoCase User-Agent "JDatabase" bot
SetEnvIfNoCase User-Agent "Monitoring" bot
SetEnvIfNoCase User-Agent "openstat" bot
SetEnvIfNoCase User-Agent "mfibot" bot
SetEnvIfNoCase User-Agent "Dataprovider" bot
SetEnvIfNoCase User-Agent "crawler" bot
SetEnvIfNoCase User-Agent "HybridBot" bot
SetEnvIfNoCase User-Agent "BLEXBot" bot
SetEnvIfNoCase User-Agent "JobboerseBot" bot
SetEnvIfNoCase User-Agent "Java/1" bot
SetEnvIfNoCase User-Agent "statdom" bot
SetEnvIfNoCase User-Agent "Guzzle" bot
SetEnvIfNoCase User-Agent "spbot" bot
SetEnvIfNoCase User-Agent "SemrushBot" bot
SetEnvIfNoCase User-Agent "ltx71" bot
SetEnvIfNoCase User-Agent "Barkrowler" bot
SetEnvIfNoCase User-Agent "ips-agent" bot
SetEnvIfNoCase User-Agent "SiteExplorer" bot
SetEnvIfNoCase User-Agent "Photon" bot
SetEnvIfNoCase User-Agent "www.ru" bot
SetEnvIfNoCase User-Agent "Axel 2" bot
SetEnvIfNoCase User-Agent "AlphaBot" bot
Deny from env=bot
*У вас этот список может быть другим в зависимости от того, какие боты сканируют ваш сайт. Ищите их в логах сервера.
Также в этот список можно добавить ботов: bingbot, msnbot, Slurp, для русскоязычных сайтов от них пользы мало, трафика почти нету, а Yahoo (Slurp) нагрузку создает огромнейшую, т.к. очень активный и агрессивный. Даже без блокировки Yahoo и Bing - этот способ уменьшит посещаемость ботами примерно на 40 условных пунктов. Также неплохо было бы следить за серверной статистикой и отслеживать других активных ботов, т.к. у меня этот список периодически пополняется.
4) Четвертый способ - блокировка по IP. Тут вам придется вести логи активности ip адресов или анализировать серверные логи, и банить ip адреса безымянных активных ботов, в основном это парсеры (автоматические воры контента и т.п.) и в большинстве случаев их ip принадлежат хостинг провайдерам, заметили активный ip, посмотрите whois ip адреса, например вот так http://whois.domaintools.com/83.222.14.3 и если там явно указан хостер - смело можно всю подсеть банить через .htaccess (каждый ip построчно в виде: deny from 83.222.14.).
Очень много таких неизвестных ботов-парсеров, а также спам-ботов идет с российских хостингов: Мастерхост, Агава, Руцентр, Можордомо, также Китай, Турцию и т.п. страны третьего мира можно банить сразу всю подсеть... Мне после таких периодических банов удавалось снизить активность заметно. Данный способ дает минимум 10 пунктов снижения нагрузки.
5) Пятый способ - баним примитивных самописных ботов, такие боты имеют отличие - у них ничего не написано в HTTP_USER_AGENT и HTTP_REFERER, если оба условия верны - блокируем. Я это делаю средствами php, в самое начало скриптов (до вызова конфигов, подключений к базе и т.п. тяжелых процессов) вставляю код:
if ($_SERVER["HTTP_REFERER"] == '' AND $_SERVER["HTTP_USER_AGENT"] == '') {die('Bad bot');}
В определенных условиях это дает до 10 пунктов снижения нагрузки.
Вот как бы и все. Такие кажется на первый взгляд простые и примитивные методы, а количество посещений сайта ботами снижается на 80-90% (и соответственно нагрузка падает очень заметно), при этом сайт ни в чем не страдает и не ущемляется, т.е. можно не бояться, что поисковики начнут к сайту плохо относиться, даже наоборот, способы № 1 и 2 - можно отнести к внутренней оптимизации сайта...
Если у вас многостраничные сайты (от нескольких тысяч страниц) или сайтов много - вам обязательно нужно проделать вышеописанное, и возможно вместо выделенного сервера за 200$ в месяц - вам хватит обычного шаред хостинга за 20$.
P.S. есть вопросы? - пишите в комментариях.
Адрес обзора: https://soft-arhiv.com/publ/kak_snizit_nagruzku_na_server