Оптимизация VPS-сервера для лучшей работы сайта

Редактор: Дмитрий Сокол 8989 19 мин Аудио

Оптимизация работы сайтов на сервере

Чтобы web-сайты на VPS/VDS и выделенных серверах работали максимально производительно, нужно:

  • заказать у провайдера мощную аппаратную конфигурацию сервера;
  • оптимально настроить на сервере программное обеспечение.

Схема работы web-сайта

Web-сайты работают по следующей схеме:

  • HTTP-запросы пользователей принимает и обрабатывает web-сервер Apache;
  • скрипты сайта обрабатываются интерпретатором языка программирования PHP;
  • данные сайта сохраняются в базу данных и при необходимости запрашиваются из нее.

Каждый из этапов данной схемы можно оптимизировать для повышения быстродействия работы сайтов.

Ускорение работы web-сервера

Nginx

На серверах Linux сайты обслуживаются web-сервером Apache, но с точки зрения производительности, это не самый оптимальный вариант.

Для ускорения работы Apache мы рекомендуем установить вместе с ним высокопроизводительный web-сервер Nginx. Тогда они будут работать одновременно, и каждый будет выполнять свою роль. Backend-сервер Apache будет работать с запросами, которые поступили из форм на сайте (например, из корзины товаров). Frontend-сервер Nginx - отвечать за отдачу статического контента, видимого пользователю в браузере (HTML, CSS, JavaScript). Так web-серверы распределяют между собой нагрузку, что ускоряет работу сайта.

Преимущества и недостатки Nginx

Преимущества:

  • возможность одновременно обслуживать сразу очень большое количество HTTP-запросов (до нескольких десятков тысяч);
  • быстрая работа с файловой системой;
  • поддержка кэширования статических файлов;
  • возможность работать в связке с Apache, давать возможность пользоваться его функционалом.

Недостатки:

  • не обрабатывает команды из файлов .htaccess, важных для работы большинства CMS (Wordpress, Drupal, Joomla и т.д.);
  • отсутствует модуль языка PHP, поэтому для обработки PHP-скриптов требуется подключать дополнительные сервисы (FastCGI или PHP-FPM).

Установка Nginx

Nginx распространяется в виде пакетов для всех популярных версий Linux.

Для Centos Nginx устанавливается командой:

yum install nginx

Для Ubuntu/Debian команда установки выглядит так: 

apt install nginx

Пример: установка Nginx на сервер с Centos

Чтобы запустить Nginx на Linux, используйте команду:

systemctl start nginx

Для перезапуска web-сервера с новой конфигурацией:

systemctl restart nginx

Конфигурация Nginx

Конфигурационный файл Nginx на Linux-серверах традиционно находится в папке /etc/nginx.

Основной конфигурационный файл - это nginx.conf.

В папках sites_enabled или vhosts расположены файлы с описанием конфигурации для отдельных web-сайтов.

Пример основного конфигурационного файла Nginx

Пример конфигурационного файла Nginx для конкретного сайта 

В данном примере Nginx настроен на работу в связке с web-сервером Apache. Сам Nginx обслуживает статические файлы (jpeg, png, css и т.д.), а все остальные запросы - с помощью конфигурационной директивы proxy_pass отправляет на Apache.

Так вы используете лучшие свойства и Nginx (скорость обработки запросов и статических файлов), и Apache (обработка скриптов PHP и .htaccess).

Nginx и PHP-FPM

Если вам не нужны уникальные функции Apache, например, поддержка файлов .htaccess, то оптимальным выбором для обработки PHP-скриптов будет вариант PHP-FPM.
 
Этот вариант PHP работает как отдельная сетевая служба на сервере, которая обслуживает запросы от Nginx на обработку PHP-скриптов.

Пример настройки Nginx на использование службы PHP-FPM. Применяется директива fastcgi_pass для отправки запросов на обработку скриптов PHP

Оптимизация работы PHP

Версия PHP

Седьмая версия языка PHP (PHP-7) - это наиболее актуальный и оптимальный вариант для использовании на сервере. PHP-7 за счет оптимизации и изменения архитектуры работает заметно быстрее, чем устаревший PHP-5.

Пример: сравнение производительности версий PHP-5.6 и PHP-7 в популярных CMS 

Чтобы узнать, какая версия PHP установлена на вашем сервере, используйте команду

php -v

в терминале (командной строке).

Мы рекомендуем всем владельцам нагруженных сайтов перевести свои серверы на работу под  PHP-7. Последние версии Wordpress, Joomla и других популярных CMS отлично работают на PHP-7. 

Переход  с PHP-5 на PHP-7

Для новых вводимых в эксплуатацию серверов с возможностью установки современной версии Linux (Centos-8, Debian-9, Ubuntu-20 ) использование PHP-7 - это естественный выбор.

Возможность установки PHP-7 на более старые версии операционной системы Linux зависит от конкретного дистрибутива. Тут может потребоваться использования дополнительных источников программных пакетов (репозиториев).

Centos

Чтобы установить PHP-7 на системе Linux Centos-7, используйте следующие команды:

#sudo yum install epel-release yum-utils
#sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
#sudo yum-config-manager --enable remi-php73
#sudo yum install php php-common php-cli

Debian

Команды для установки PHP-7 в системе Linux Debian-8:

#sudo apt install ca-certificates apt-transport-https 
#wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -
#sudo echo "deb https://packages.sury.org/php/ jessie main" | tee /etc/apt/sources.list.d/php.list
#sudo apt update
#sudo apt install php7.2-cli php7.2-common

Акселератор опкодов

PHP - это интерпретируемый язык программирования.

При запуске скрипта:

  • интерпретатор PHP каждый раз читает его исходный код;
  • преобразует в набор специальные операционные коды (далее опкоды);
  • исполняет их.

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

Технология кэширования опкодов называется opcache и доступна в виде специального модуля (расширения) для PHP. 

Установка расширения opcache

Чтобы поставить модуль (расширение) PHP на Centos, используйте команду:

yum install php-opcache

На Debian/Ubuntu:

apt install php-opcache

Затем с помощью команды

php -m

проверьте, подключилось ли расширение opcache в PHP:

Конфигурация opcache 

В работе расширение PHP opcache использует свой набор конфигурационных директив PHP. Эти настройки находятся в общем файле php.ini или в отдельном .ini-файле в каталоге /etc/php.d.

Оптимальная конфигурация opcache обычно выглядит так:

#включить использование opcache
opcache.enable=1

#количество памяти для opcache
opcache.memory_consumption=128

#количество памяти для данных строк opcache
opcache.interned_strings_buffer=8

количество файлов отслеживаемое opcache
opcache.max_accelerated_files=4000

#порог для переиспользования памяти opcache
opcache.max_wasted_percentage=5

Пример конфигурационных директив opcache в файле php.ini

Оптимизация работы базы данных

Обработка запросов к базе данных для нагруженных сайтов (например, интернет-магазинов) также занимает значительную долю мощности сервера, поэтому важна оптимизация работы базы данных. 

В работе сайтов на выделенных и виртуальных серверах используется система управления базами данных MySQL.

Потребление памяти MySQL

Быстрая работа сервера базы данных зависит от количества выделяемой для него оперативной памяти сервера. 

Мы рекомендуем  выделять от 50 до 80% всей памяти сервера под нужды базы данных, в зависимости от количества запросов к БД и общей нагрузки на сайт.

Конфигурация MySQL

Основной конфигурационный файл MySQL -  это /etc/my.cnf.

В некоторых версиях Linux конфигурация сервера базы данных может храниться в папке /etc/my.cnf.d.

Главные настройки MySQL, влияющие на производительность, - это размер выделяемой для работы памяти. Ключевыми здесь являются следующие настройки (указаны  рекомендуемые значения для сервера с объемом оперативной памяти 2 Gb):

1. Настройки размера буферов памяти:

#Буфер запросов
query_cache_size = 128M 
#Буфер таблиц
table_open_cache = 4096
#Буфер индексов
key_buffer_size = 64M
#Буфер Join-запросов
join_buffer_size = 32M
#Буфер сортировочных запросов
sort_buffer_size = 32M

2. Настройка движка InnoDB:

innodb_file_per_table
#Объем памяти под InnoDB
innodb_buffer_pool_size = 1024M
#Механизм работы с файловой системой
innodb_flush_log_at_trx_commit = 2
#Размер файла транзакций
innodb_log_file_size = 64M
#Способ записи данных на диск
innodb_flush_method = O_DIRECT

Пример конфигурационного файла MySQL

Для перезапуска MySQL с измененной конфигурацией используйте команду:

systemctl restart mysql.

Логирование медленных запросов MySQL

Для быстрой работы web-сайтов важно, чтобы запросы к базе данных выполнялись без задержек.

1. Для того, чтобы отследить, есть ли на сервере медленные запросы к MySQL, добавьте следующие конфигурационные директивы в файл my.cnf:

#Длительность запроса в секундах когда он считается "медленным"
long_query_time=5
#Включаем запись "медленных" запросов
slow_query_log=1
#Название файла в котором будут логироваться "медленные" запросы
slow_query_log_file=/var/log/mysql/mysqld-slow.log

2. После добавления в конфигурацию этих команд, перезапустите MySQL. 
3. После перезапуска в папке /var/log/mysql появится файл mysqld-slow.log, в который будут записываться все запросы к базе данных, длительность которых превышает 5 секунд. 

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

Оптимизация таблиц базы данных

Если сайты начинают притормаживать в работе, то мы рекомендуем проверить сервер на количество “медленных” (выполняющихся дольше определенного лимита в директиве long_query_time) запросов к базе данных. Если на сервере наблюдается большое количество “медленных” запросов к базе данных и, соответственно, медленно работают web-сайты, то нужно проанализировать схему работы скриптов сайта с базой данных и при возможности выполнить оптимизацию таблиц БД.

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

  • Слишком большое количество данных в таблицах. Нужно провести оптимизацию и удалить часть данных, например, относящихся к прошедшим годам.
  • Отсутствие индексов (оглавления одного или нескольких полей, сильно упрощающих поиск) у таблиц. Запросы, связанные с поиском данных по определенным критериям, хорошо оптимизируются с помощью индексов, настройкой которых должны заняться программисты сайта.
  • Медленная работа самой системы управления БД. Если сервер работает быстро, но тормозит база данных, то нужно оптимизировать ее конфигурацию, выделив больше памяти для ее работы.
  • Неправильные алгоритмы работы с данными. Если скрипты сайта запрашивают из базы данных большие объемы информации без оптимизации запросов, то скорость работы будет низкой. Например, если скрипт должен показать данные за одну неделю, но при этом запрашивает из базы данных информацию за весь доступный период времени - это напрасная трата ресурсов сервера. 

Memcached

Кэширование HTML-страниц в виде файлов на сервере - еще один способ для ускорения работы сайтов. Так, например, работают плагины кэширования для Wordpress и других CMS. 

Дальнейшее развитие этой идеи - хранение HTML-страниц не в файловой системе, а в быстрой оперативной памяти сервера. Для этого разработано специальное программное обеспечение - memcached.

Установка 

Для установки memcached нужно выполнить следующие команды:

Centos:

> yum -y install memcached
> systemctl enable memcached
> systemctl start memcached

Debian/Ubuntu:

> apt-get install memcached

Memcached использует конфигурационный файл /etc/memcached.conf.

Данный пример конфигурационного файла указывает для memecached использовать 512 мегабайт памяти и принимать соединения на IP 127.0.0.1 порт 11211.

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

Использование memcached

После установки и настройки memcached можно использовать для ускорения работы сайтов. Например, для CMS Wordpress популярный плагин ускорения работы W3 Total Cache поддерживает эту функцию. 

Для того, чтобы включить использование memcached в плагине W3 Total Cache, вам нужно: 

1. Перейти на страницу настройки плагина W3 Total Cache.

2. В секции “Page Cache” включить опцию “Page Cache” и выбрать “Memcached” из списка вариантов кэширования.

После сохранения настроек Wordpress начнет использовать memcached как быстрый метод хранения кэша страниц сайта.

Модуль Google Pagespeed

Сервис Google Pagespeed Insights проверяет с какой скоростью web-сайт отображается в браузере посетителя. Данные о скорости загрузки сайта используются для ранжирования поисковой выдачи, поэтому владельцам сайтов их нельзя игнорировать.

Для повышения скорости загрузки сайтов Google выпустила специальный модуль для web-серверов Apache и Nginx - mod_pagespeed.

Схема работы mod_pagespeed

  • оптимизация CSS и JavaScript сайта;
  • включение параметров кэширования страниц, изображений и скриптов сайта;
  • кэширование страниц сайта на файловой системе.

Установка mod_pagespeed для Apache

Для установки mod_pagespeed для web-сервера Apache воспользуйтесь следующими командами:

Centos:

> wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_
current_x86_64.rpm
> rpm -Uvh mod-pagespeed-*.rpm
> systemctl restart httpd

Debian/Ubuntu:

> wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_
current_amd64.deb
> dpkg -i mod-pagespeed-*.deb
> systemctl restart apache2

После установки отредактируйте конфигурационный файл модуля pagespeed.conf. В этом файле должна присутствовать настойка ModPagespeed on для включения работы модуля.

Пример конфигурационного файла mod_pagespeed

После завершения настройки перезагрузите web-сервер Apache командой

apachectl restart.

Загрузка вашего сайта будет ускорена с помощью модуля Google Pagespeed.

Комментарий эксперта

Станислав Авдеев

Станислав Авдеев, инженер службы эксплуатации FirstVDS

Часто причиной проблем в работе сайтов является ненастроенный лимит обработчиков Apache2\PHP-FPM. В отсутствие этого лимита Apache2 запускает до 256 обработчиков, а каждый из них требует оперативной памяти. Я бы советовал в этом случае ограничить количество обработчиков до 10, так как недостаток памяти обычно приводит к аварийному завершению процессов и вместо ожидаемой страницы посетитель сайта получит ошибку 502 или 500. Кроме того, возникновение таких ошибок в процессе работы скриптов может приводить к непредсказуемым последствиям.

Далее, команда php -v покажет основную версию PHP. При этом на серверах с панелью ISPmanager могут быть установлены разные версии:  все они находятся в директории /opt и видны в панели управления, где при необходимости вы можете их найти. Использование правильной версии PHP важно в скриптах запускаемых из Cron. Также стоит заметить, что предпочтительно вызывать из планировщика именно PHP-интерпретатор, а не делать вызов к веб-серверу через curl или wget.

Что же касается мощных аппаратных конфигураций сервера, то PHP-приложения, как правило, однопоточные, поэтому если нужна высокая скорость обработки PHP-скриптов, то лучше взять сервер с высокой частотой процессора. На сайте firstvds.ru можно подобрать гибкую конфигурацию, это позволит вам найти нужный баланс ресурсов для максимальной производительности без переплаты за лишние ядра или оперативную память.

Дмитрий Сокол
Не нашли ответ на свой вопрос?
Задайте его экспертам! Ответ приходит очень быстро и прямо на ваш email.

Добавляя подтверждение "Я не робот" вы так же даете согласие получать сообщения от ru.hostings.info и принимаете его Политику конфиденциальности, позволяя ru.hostings.info хранить и обрабатывать вашу личную информацию, указанную выше, для предоставления вам запрашиваемого контента.

Рейтинги хостинг-провайдеров по задачам сайта
Апреля
Панель управления

От панели управления зависит ваше удобство в настройке хостинге\сайта.

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

Вид хостинга

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

Виртуальный хостинг - подходит для большинства проектов начального уровня с посещаемостью до 1000 человек в сутки. В таком хостинге мощность сервера делится между несколькими хостинговыми аккаунтами. Услуга проста в настройке даже для новичков.

VPS - подходит для более сложных проектов с достаточно большой нагрузкой и посещаемостью до 10000 человек в сутки. Здесь мощность сервера фиксированная для каждого виртуального сервера, при этом сложность настройки увеличивается.

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

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

CMS

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

Тип виртуализации

Виртуализация - это создание виртуальной среды на физическом сервере, позволяющая запускать требуемые ПО без затрагивания процессов, совершаемых другими пользователями сервера.  С её помощью ресурсы физического сервера распределяются между виртуальными (VPS/VDS). Основные виды: аппаратная (KVM), паравиртуализация, виртулизация на уровне ОС (OpenVZ).

Прочее

Абузоустойчивый хостинг - компании, которые разрешают размещать практически любой контент, даже запрещенный (спам, варез, дорвеи, порнографические материалы). Такие компании не удаляют контент вашего веб-сайта при первой же жалобе (“абузе”).

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

Безопасный хостинг - тот, где администрация постоянно обновляет ПО установленное на серверах, устанавливает базовую защиту от DDoS-атак, антивирус и файерволлы, блокирует взломанные сайты и помогает их "лечить".

Защита от DDOS - компании, которые предоставляют хостинг с защитой от DDoS-атак. Такие пакеты ощутимо дороже обычных, но они стоят своих денег, так как ваш сайт будет защищен от всех видов сетевых атак.

Бесплатный тест

Тестовый период - предоставляется хостером бесплатно на 7-30 дней, чтобы вы могли удостовериться в его качестве.

Moneyback - период на протяжении которого хостер обязуется вернуть деньги, если вам не понравится хостинг.

Региональные
Цена

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

Также мы собрали тарифы от тысяч хостеров, чтобы вы могли выбрать хостинг по конкретной цене.

Технологии и ОС

На языке программирования PHP и базах данных MySQL сейчас работает большинство сайтов. Они же поддерживаются практически всеми современными хостингами.

ASP.NET - платформа для разработки веб-приложений от Майкрософт.

ОС - операционная система, установленная на сервере хостинга. Мы рекомендуем размещать на серверах с Linux, если нет особых требований у разработчиков сайта.

Тип диска