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

Kate

Administrator
Команда форума

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

Чтобы 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 устанавливается командой:

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

37301a34c1cae659a88aeac67f6987d9.jpg


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

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

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

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

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

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

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

9b9de719f063fcdf261ab7ab95b459ef.jpg


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

670c8b580d764278d5a6b59dcc0e0383.jpg


Пример конфигурационного файла 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-скриптов.

7727658e805c8971ccea4ecd7ea36f1b.jpg


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

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

Версия PHP​

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

45219c95e9fbb67a8733aaefa2292182.jpg


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

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

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

e82910962ec58ff87a8124ddec96efcb.jpg


Мы рекомендуем всем владельцам нагруженных сайтов перевести свои серверы на работу под 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, используйте команду:

На Debian/Ubuntu:

adb346d2170c552b883a21be9e0ef504.jpg


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

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

576a344a5f0df02ab85a3ad23040941d.jpg


Конфигурация 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
b240ee930094294033bb4acdc9764d09.jpg


Пример конфигурационных директив 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
bdaa52a1592de0e57dbf9f050758ce4a.jpg


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

Для перезапуска 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.

4164be7fd5904de961c758dd15ca0889.jpg


Данный пример конфигурационного файла указывает для 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.

d77917de4676f051d4191b9802dcc1f1.jpg


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

e2f1ba94e3a924534e125da3b0801b48.jpg


После сохранения настроек 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 для включения работы модуля.

b2f592038d0707ba6bfe3a6855ce4a82.png


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

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

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

Источник статьи: https://ru.hostings.info/schools/optimizacziya-vps-servera-dlya-luchshej-raboty-sajta.html
 
Сверху