Оптимизация VPS-сервера

Скорость работы веб-сайта влияет на его эффективность. Так, поисковые системы Яндекс и Google учитывают этот показатель в ранжировании, а пользователи массово уходят с ресурсов, на которых приходится долго ждать загрузки страниц. Вывод простой: нужна периодическая оптимизация сервера, чтобы добиться успеха в бизнес-проектах и высоких продаж через интернет-магазины.

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

Виртуальная машина VPS, выделяемая провайдером хостинга, обычно имеет весьма ограниченные ресурсы. Поэтому приходится разбираться, как ускорить сервер, исходя из прогнозируемой нагрузки на него. Например, в соответствии с планируемым трафиком и «тяжестью» устанавливаемого ПО, если речь идет об облачном приложении вроде CRM.

Оптимизация VPS-сервера

В общем случае оптимизация включает настройку:

  1. Веб-сервера Apache.
  2. Модуля кэширования Nginx.
  3. Сервера базы данных MySQL.
  4. Программного обеспечения PHP.

Кроме того, необходима и настройка операционной системы. В итоге требуется добиться оптимального размера буфера, кэширования запросов и записи-чтения таблиц. При инсталляции перечисленных компонентов устанавливаются значения «по умолчанию», но они подходят только для проектов с небольшой нагрузкой вроде сайта-визитки.

Например, MySQL при резком росте объема базы данных способно полностью занять выделенную для VPS оперативную память. Работа с файлом подкачки происходит медленнее, из-за чего ресурс начинает «тормозить». То же относится к настройкам Nginx – нельзя увлекаться размером буфера, который размещается в оперативке. Значения следует выбирать, исходя из реальной нагрузки.

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

При оптимизации работы сервера рекомендуется учитывать типовую схему работы хостинга. Для запроса определенного домена клиентский компьютер обращается к Apache по указанному в DNS-записи IP-адресу удаленной машины. Основная его задача – запустить интерпретатор языка PHP, на котором пишутся практически все сайты (как минимум – основные модули).

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

Последующие действия:

  1. Запускается скрипт, записанный в файле index.php, расположенном в корне хостинга.
  2. Из базы данных считывается информация, необходимая для рендеринга страницы.
  3. Значения передаются в интерпретатор PHP для генерирования элементов сайта.
  4. Формируется динамический HTML-документ, который передается браузеру.

Получается, что скорость открытия сайта зависит от времени отклика сервера в целом и работы модулей Apache, PHP и MySQL. В каждом из них есть определенные настройки, способные влиять на оптимизацию. Главное – иметь доступ к панели управления хостинга, где через менеджер файлов или встроенные функции есть возможность менять режимы.

Настройка кэширования Nginx

Модуль Nginx используется как HTTP-сервер и прокси-сервер с поддержкой протоколов TCP/UDP. Он изначально разрабатывался для высоконагруженных сайтов (например, на нем работают Яндекс, Mail.ru и ВКонтакте). Отчасти результата добиваются встроенным кэшированием статических файлов, из которых преимущественно и собирается любая страница сайта.

Перед любыми изменениями в конфигурации рекомендуется создавать резервную копию:

cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.orig

vim /etc/nginx/nginx.conf

После этого можно экспериментировать. Например, при помощи директивы worker_processes легко управлять задействованными ядрами процессоров. Чем больше статики приходится обрабатывать, тем выше должна оказаться выделенная мощность. Значение для подключения 10 процессоров:

worker_processes 10;

Следующая директива регулирует максимальное количество одновременных подключений. Она расположена в секции event:

worker_connections 5000;

В этом примере Nginx настраивается на оптимальную работу максимум с 5000 пользователей. Это значение должно соответствовать выделенным мощностям и прогнозируемому трафику на сайте. К такому параметру рекомендуется использовать директиву worker_rlimit_nofile. Она указывает, какое количество дескрипторов будет выделено для обработки статики (картинки, JS, CSS).

По умолчанию его значение должно равняться удвоенному Max Clients. Оно меняется в файле /etc/security/limits.conf. Например, популярным является показатель в 200000 дескриптов:

worker_rlimit_nofile 200000;

Ошибки и отчеты по работе системы сохраняются в лог-файле /var/log/nginx/error.log. Запись в него активируется командой error_log с указанием пути. Если отметить опцию crit, сервер будет сохранять только критические ошибки.

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

Следующий этап оптимизации web-сервера заключается настройке интерпретатора PHP – перед этим рекомендуется обновить его до последней актуальной версии. «По умолчанию» на хостинге ставится релиз 5.6, который может оказаться несовместимым с написанным кодом. Например, это важно учитывать при инсталляции плагинов сторонних разработчиков.

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

Обновление VPS на системе Linux осуществляется комбинацией команд (на примере Centos):

#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

Если на хостинг установлена панель управления типа Plesk или ISPmanager, можно воспользоваться встроенным функционалом. После подключения домена в информационном поле появляется пункт «Настройка PHP», где доступен выбор версий интерпретатора. Переключение осуществляется всего одним кликом (выбором релиза из выпадающего списка).

Теперь об оптимизации. Некоторые модули, написанные на PHP, «сами по себе» обрабатываются медленно. Например, обращение через интерфейс API, обработка больших выборок из базы данных или считывание-запись объемных файлов. Такие медленные участки кода оптимально ускорять при помощи кэширования.

Популярное решение – утилита Memcached, однако полностью без настройки конфигурации не обойтись. Основные параметры вносятся в файл PHP.INI. Его расположение зависит от того релиза операционной системы, на которой работает VPS-сервер. Чтобы выяснить путь к нему, можно воспользоваться простым скриптом:

<?php

phpinfo();

?>

После загрузки созданного файла PHP на сервер его нужно запустить командой:

https://домен.ru/имя_файла.php

В появившемся окне будет раздел Configuration File (php.ini) Path, где указано расположение файла конфигурации интерпретатора PHP. При обновлении версии путь изменится, понадобится искать его заново. Редактируется он встроенными средствами файлового менеджера, установленного на панели управления хостинга, или утилиты типа FileZilla (при подключении по протоколу FTP).

В файле PHP.INI в основном устанавливаются параметры:

  • memory_limit = 32M – максимальный объем памяти, выделенный под выполняемые скрипты (увеличивать значение рекомендуется только в крайних случаях);
  • output_compression = Off – включает кэширование на стороне веб-сервера, что снизит зависимость от производительности клиентских машин;
  • max_execution_time = 5 – максимальное время, за которое скрипт должен завершить работу, увеличивать также не рекомендуется;
  • enable_gc = On – включает фоновую оптимизацию памяти путем удаления конкретного «мусора», остающегося после обработки скриптов;
  • expose_php = Off – отключает отправку версии интерпретатора PHP вместе с ответом на все подаваемые серверу запросы;
  • report_memleaks = On – включает фиксацию сообщений об утечке памяти в лог-файл, чтобы вовремя обнаруживать ошибки исполнения программы;
  • post_max_size = 4M – устанавливает максимально допустимый объем данных, который отправляется методом POST.

Также рекомендуется перенести хранение текущих сессий в кэш Memcached. Иначе после того, как накопится несколько десятков тысяч файлов (в одной папке), работа сайта заметно замедлится. При использовании кэша эта проблема нивелируется. Подключается утилита следующими изменениями в файле PHP.INI:

session.save_handler = memcache

session.save_path = «tcp://localhost:11211»

В приведенном примере параметр localhost:11211 – это стандартный хост, порт утилиты Memcached. Плюсом к перечисленным рекомендациям стоит отказаться от создания объектов, если они не будут тут же сохраняться в базе данных. То же относится к чтению готовых объектов, так как их предпочтительно считывать напрямую из БД, а не генерировать по мере выполнения кода.

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

# sudo apt install memcached libmemcached-tools

Настройка программы производится через файл /etc/memcahced.conf – в него вносятся опции, которые будут при запуске. Например, -m определяет объем оперативной памяти, который выделяется для работы сервиса. По умолчанию это значение равно 64 Мбайт. После внесения изменений требуется перезапуск VPS-машины, чтобы новые настройки применились.

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

Последний шаг в оптимизации веб-сервера – настройка сервера базы данных MySQL. От его работы зависит скорость обработки данных (чтение и запись в БД). Ключевым здесь является объем памяти, выделяемый для размещения информации при рендеринге страниц сайта. Ниже представлен пример, исходя из размера оперативки 2 Гбайт.

Конфигурационный файл MySQL располагается по пути /etc/my.cnf. В него вносятся параметры:

query_cache_size = 128M

table_open_cache = 4096

key_buffer_size = 64M

join_buffer_size = 32M

sort_buffer_size = 32M

Этими командами устанавливается буфер для таблиц, индексов и запросов, в том числе и сортировочных (соответственно строкам). После внесения изменений требуется перезагрузка VPS или сервера MySQL. Последнее выполняется командой:

systemctl restart mysql

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

long_query_time=5

slow_query_log=1

slow_query_log_file=/var/log/mysql/название_лог_файла.log

После перезапуска сервера в папке /var/log/mysql появится файл mysqld-slow.log. Туда будет идти запись всех запросов, длительность которых превышает 5 секунд. Остается оптимизировать ее для быстрой обработки сохраняемых данных средствами CMS. Если сайт «тормозит», рекомендуется пользоваться утилитой Google PageSpeed Insights. Она доступна по ссылке:

https://developers.google.com/speed/pagespeed/insights/

Модуль Google PageSpeed

Иногда советуют устанавливать эту утилиту на сервер Apache или Nginx, но проще воспользоваться ее веб-версией. Она отображает результат измеренной скорости открытия сайта отдельно на настольных ПК и мобильных устройствах. Кроме того, Google PageSpeed Insights показывает подробности измеряемых параметров: отдельно те, что оптимизированы хорошо, и те, которые необходимо исправлять.

Оптимизация VPS-сервера

Чаще всего приходится оптимизировать:

  1. Время отклика сервера и загрузки страницы.
  2. Размер изображений, видео или анимации.
  3. Файлы со скриптами CSS и JavaScript.
  4. Кэширование страниц и картинок.

Всего контролируется более 20 параметров. Считается нормой, если общий показатель в баллах превышает 70-80 очков из 100. Для этого даже необязательно оптимизировать все рекомендуемые утилитой показатели. Главное, обеспечить высокую скорость загрузки не только на компьютерах, а еще и на смартфонах или планшетах.

Hosting2go.ru