Оптимизация работы сайтов на сервере
Чтобы 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 команда установки выглядит так:yum install nginx
apt install nginx

Пример: установка Nginx на сервер с Centos
Чтобы запустить Nginx на Linux, используйте команду:
Для перезапуска web-сервера с новой конфигурацией:systemctl start nginx
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, используйте следующие команды:
Debian#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
Команды для установки 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 каждый раз читает его исходный код;
- преобразует в набор специальные операционные коды (далее опкоды);
- исполняет их.
Технология кэширования опкодов называется opcache и доступна в виде специального модуля (расширения) для PHP.
Установка расширения opcache
Чтобы поставить модуль (расширение) PHP на Centos, используйте команду:На Debian/Ubuntu:yum install php-opcache
apt install php-opcache

Затем с помощью команды
проверьте, подключилось ли расширение opcache в PHP:php -m

Конфигурация 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. Настройки размера буферов памяти:
2. Настройка движка InnoDB:#Буфер запросов
query_cache_size = 128M
#Буфер таблиц
table_open_cache = 4096
#Буфер индексов
key_buffer_size = 64M
#Буфер Join-запросов
join_buffer_size = 32M
#Буфер сортировочных запросов
sort_buffer_size = 32M
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:
2. После добавления в конфигурацию этих команд, перезапустите MySQL.#Длительность запроса в секундах когда он считается "медленным"
long_query_time=5
#Включаем запись "медленных" запросов
slow_query_log=1
#Название файла в котором будут логироваться "медленные" запросы
slow_query_log_file=/var/log/mysql/mysqld-slow.log
3. После перезапуска в папке /var/log/mysql появится файл mysqld-slow.log, в который будут записываться все запросы к базе данных, длительность которых превышает 5 секунд.
Если таких запросов окажется много, то разработчикам сайта необходимо проанализировать и оптимизировать схему работы с базой данных.
Оптимизация таблиц базы данных
Если сайты начинают притормаживать в работе, то мы рекомендуем проверить сервер на количество “медленных” (выполняющихся дольше определенного лимита в директиве long_query_time) запросов к базе данных. Если на сервере наблюдается большое количество “медленных” запросов к базе данных и, соответственно, медленно работают web-сайты, то нужно проанализировать схему работы скриптов сайта с базой данных и при возможности выполнить оптимизацию таблиц БД.Причиной медленных запросов к базе данных могут быть:
- Слишком большое количество данных в таблицах. Нужно провести оптимизацию и удалить часть данных, например, относящихся к прошедшим годам.
- Отсутствие индексов (оглавления одного или нескольких полей, сильно упрощающих поиск) у таблиц. Запросы, связанные с поиском данных по определенным критериям, хорошо оптимизируются с помощью индексов, настройкой которых должны заняться программисты сайта.
- Медленная работа самой системы управления БД. Если сервер работает быстро, но тормозит база данных, то нужно оптимизировать ее конфигурацию, выделив больше памяти для ее работы.
- Неправильные алгоритмы работы с данными. Если скрипты сайта запрашивают из базы данных большие объемы информации без оптимизации запросов, то скорость работы будет низкой. Например, если скрипт должен показать данные за одну неделю, но при этом запрашивает из базы данных информацию за весь доступный период времени - это напрасная трата ресурсов сервера.
Memcached
Кэширование HTML-страниц в виде файлов на сервере - еще один способ для ускорения работы сайтов. Так, например, работают плагины кэширования для Wordpress и других CMS.Дальнейшее развитие этой идеи - хранение HTML-страниц не в файловой системе, а в быстрой оперативной памяти сервера. Для этого разработано специальное программное обеспечение - memcached.
Установка
Для установки memcached нужно выполнить следующие команды:Centos:
Debian/Ubuntu:> yum -y install memcached
> systemctl enable memcached
> systemctl start memcached
Memcached использует конфигурационный файл /etc/memcached.conf.> apt-get install memcached

Данный пример конфигурационного файла указывает для 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:
Debian/Ubuntu:> wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_
current_x86_64.rpm
> rpm -Uvh mod-pagespeed-*.rpm
> systemctl restart httpd
После установки отредактируйте конфигурационный файл модуля pagespeed.conf. В этом файле должна присутствовать настойка ModPagespeed on для включения работы модуля.> wget https://dl-ssl.google.com/dl/linux/direct/mod-pagespeed-stable_
current_amd64.deb
> dpkg -i mod-pagespeed-*.deb
> systemctl restart apache2

Пример конфигурационного файла mod_pagespeed
После завершения настройки перезагрузите web-сервер Apache командой
Загрузка вашего сайта будет ускорена с помощью модуля Google Pagespeed.apachectl restart.
Источник статьи: https://ru.hostings.info/schools/optimizacziya-vps-servera-dlya-luchshej-raboty-sajta.html