Настройка VDS для WordPress и WooCommerce

Рубрики:VDS
Автор: Пряхин Станислав
Время прочтения: мин
Комментариев: нет
12.02.2025

Миграция WordPress сайта с WooCommerce на VDS сервер требует не только правильного переноса файлов и базы данных, но и оптимальной настройки PHP для обеспечения высокой производительности и безопасности. В этой статье мы рассмотрим все необходимые шаги для оптимизации PHP на VDS сервере.

План миграции WordPress на VDS

Этап 1: Подготовка к миграции

  1. Создайте полную резервную копию вашего сайта (файлы и база данных)
  2. Разверните VDS сервер с ISP Manager
  3. Настройте оптимальные параметры PHP
  4. Установите необходимые расширения PHP

Этап 2: Перенос данных

  1. Перенесите базу данных с помощью плагина Duplicator
  2. Выгрузите файлы сайта в архив и загрузите на новый сервер
  3. Распакуйте архив на новом сервере
  4. Настройте права доступа к файлам:
    # Установка прав 644 для всех файлов
    find /путь/к/вашему/сайту -type f -exec chmod 644 {} \;
    
    # Установка прав 755 для всех директорий
    find /путь/к/вашему/сайту -type d -exec chmod 755 {} \;
    
    # Установка правильного владельца файлов
    chown -R пользователь:группа /путь/к/вашему/сайту
                    

Этап 3: Настройка и тестирование

  1. Добавьте домен в ISP Manager
  2. Отредактируйте hosts-файл для локального тестирования
  3. Проверьте работу сайта перед сменой DNS
  4. Установите оптимизирующие плагины для использования расширений PHP

Оптимальные настройки PHP для WordPress с WooCommerce

Параметр Рекомендуемое значение Описание
PHP версия 8.1+ Использование современной версии PHP значительно повышает производительность
max_input_vars 50000 Количество переменных ввода, важно для больших форм и каталогов
max_file_uploads 20 Количество файлов, которые можно загрузить за один раз
opcache.memory_consumption 256 Объем памяти для кэша скомпилированного кода в MB
opcache.max_accelerated_files 20000 Максимальное количество файлов в кэше OPcache
opcache.jit_buffer_size 256 Размер буфера JIT-компилятора в PHP 8+
session.gc_probability 1 Вероятность запуска сборщика мусора сессий
session.use_strict_mode 1 Усиленная безопасность сессий
realpath_cache_size 8M Размер кэша реальных путей
realpath_cache_ttl 3600 Время жизни кэша реальных путей
max_execution_time 600 Максимальное время выполнения скрипта
max_input_time 600 Максимальное время обработки входных данных
memory_limit 1024M Максимальный объем оперативной памяти, доступный PHP
post_max_size 512M Максимальный размер данных, отправляемых методом POST
upload_max_filesize 512M Максимальный размер загружаемого файла

Установка необходимых расширений PHP

Для оптимальной работы WordPress с WooCommerce рекомендуется установить следующие расширения PHP:

Расширение Назначение Команда установки
imagick Оптимизация изображений apt install php8.1-imagick
redis Кэширование объектов apt install redis-server php8.1-redis
memcached Альтернативное кэширование apt install memcached php8.1-memcached
intl Поддержка многоязычности apt install php8.1-intl
opcache Кэширование PHP-кода Встроено в PHP, требует настройки
mysqli Работа с базами данных MySQL apt install php8.1-mysqli
mbstring Поддержка многобайтовых строк apt install php8.1-mbstring
mbstring Поддержка многобайтовых строк apt install php8.1-mbstring
soap Работа с SOAP API apt install php8.1-soap
xml Обработка XML apt install php8.1-xml
gd Обработка изображений apt install php8.1-gd

Настройка OPcache и JIT

Для PHP 8+ рекомендуется активировать JIT-компилятор, который может значительно ускорить выполнение PHP-кода. Настройки для файла /etc/php/8.1/fpm/conf.d/10-opcache.ini:

opcache.enable=1
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.revalidate_freq=2
opcache.jit=1255
opcache.jit_buffer_size=256M
    

Настройка плагинов WordPress для использования расширений

После установки всех необходимых расширений PHP, важно установить соответствующие плагины WordPress для их использования:

Расширение PHP Рекомендуемые плагины
Redis Redis Object Cache, WP Redis
Memcached W3 Total Cache, WP Rocket
Imagick EWWW Image Optimizer, Imagify, ShortPixel
OPcache WP-Optimize, Perfmatters

Оптимизация MySQL

Шаг 1: Создайте новый файл конфигурации MySQL.

Перейдите в директорию /etc/mysql/mysql.conf.d/ и создайте файл custom.cnf.

Этот файл позволит задать кастомные настройки MySQL без изменения основного конфигурационного файла.

Шаг 2: Добавьте в файл следующее содержимое:

[mysqld]
# Количество соединений
max_connections = 300

# Размер пакетов
max_allowed_packet = 64M

# Таймауты соединений
connect_timeout = 20
wait_timeout = 300
interactive_timeout = 300

# ========================
# Оптимизация InnoDB
# ========================
# Выделяем ~60% памяти под InnoDB буфер (3.5GB из 6GB)
innodb_buffer_pool_size = 3584M

# Количество пулов (1 на каждое ядро)
innodb_buffer_pool_instances = 4

# Размер лога транзакций
innodb_log_file_size = 512M
innodb_log_buffer_size = 64M

# Оптимизация производительности
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT

# ========================
# Кэширование
# ========================
# Оптимизировано для 4 ядер
table_open_cache = 2048
thread_cache_size = 64

# Размеры временных таблиц
tmp_table_size = 128M
max_heap_table_size = 128M

# ========================
# Оптимизация сортировки
# ========================
sort_buffer_size = 4M
read_buffer_size = 4M
read_rnd_buffer_size = 8M

# ========================
# Логирование медленных запросов
# ========================
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes = 1

# ========================
# Дополнительные оптимизации
# ========================
# Оптимизация для SSD
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000

# Отключение обратного DNS-поиска
skip_name_resolve = 1

# Оптимизация для Join-запросов
join_buffer_size = 4M

# Оптимизация загрузки базы при старте
innodb_buffer_pool_dump_at_shutdown = 1
innodb_buffer_pool_load_at_startup = 1

Шаг 3: Сохраните файл и перезагрузите MySQL.

Выполните следующую команду:

sudo systemctl restart mysql

Важно! Перед внесением изменений убедитесь, что у вас есть резервная копия конфигурационного файла.

Оптимальные параметры PHP-FPM для WooCommerce

Шаг 1: Найдите и отредактируйте файл конфигурации PHP-FPM.

Обычно он находится в /etc/php/8.1/fpm/pool.d/pool.d/xn--e1afgfqo3f.com.conf.

Правильная настройка PHP-FPM критически важна для интернет-магазинов на WooCommerce, так как они генерируют множество параллельных запросов.

Шаг 2: Для сервера с 4 ядрами и 6GB RAM добавьте следующие параметры:


pm = dynamic
pm.max_children = 50
pm.start_servers = 10
pm.min_spare_servers = 5
pm.max_spare_servers = 20
pm.max_requests = 500
request_terminate_timeout = 600
pm.process_idle_timeout = 10s

Шаг 3: Для дополнительной оптимизации (если у вас SSD-диск) добавьте:


request_terminate_timeout = 300s
rlimit_files = 65536
rlimit_core = unlimited

Шаг 4: Сохраните файл и перезапустите PHP-FPM.

Выполните следующую команду:

sudo systemctl restart php8.1-fpm

Важно! Перед внесением изменений создайте резервную копию конфигурационного файла.

Объяснение параметров:

  • pm.max_children = 50 → PHP-FPM сможет одновременно обрабатывать до 50 процессов (вместо 5). Это критично для WooCommerce, так как там много AJAX-запросов (например, обновление корзины, фильтры, поиск товаров).
  • pm.start_servers = 10 → При запуске создастся 10 PHP-процессов, чтобы быстрее обрабатывать первые запросы.
  • pm.min_spare_servers = 5 → Минимум 5 свободных процессов, чтобы запросы не ждали в очереди.
  • pm.max_spare_servers = 20 → Максимум 20 свободных процессов (баланс между скоростью и нагрузкой на сервер).
  • pm.max_requests = 500 → Перезапускает процессы после 500 обработанных запросов (чтобы избежать утечек памяти).
  • request_terminate_timeout = 600s → Если какой-то запрос завис (например, большой экспорт товаров), PHP его убьет через 10 минут.
  • pm.process_idle_timeout = 10s → Процессы, которые не используются, будут завершаться через 10 секунд.
  • rlimit_files = 65536 → Увеличивает лимит открытых файлов (актуально, если у WooCommerce много товаров).
  • rlimit_core = unlimited → Снимает ограничения на использование процессора.

Настройки конфигурации NGINX под WordPress + Woocommerce


# Оптимизации для WordPress
# Разместите в /etc/nginx/vhosts-resources/xn--e1afgfqo3f.com/custom.conf
# После внесения изменений проверьте корректность конфигураций командой sudo nginx -t

# Заголовки безопасности
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header Content-Security-Policy "default-src * 'unsafe-inline' 'unsafe-eval' data: blob: filesystem:;" always;
add_header Permissions-Policy "" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;

# Блокировка XML-RPC (устаревший API, уязвимый к атакам)
location = /xmlrpc.php {
    deny all;
}

# Блокировка выполнения PHP в uploads/ директории
location /wp-content/uploads/ {
    location ~ \.php$ {
        deny all;
    }
}

# Улучшенное кэширование статики
location ~* \.(jpg|jpeg|gif|png|svg|ico|css|js|mp4|woff|woff2|eot|ttf|otf|mp3|ogg|zip|gz|bz2?|rar|swf|pdf|webp)$ {
    expires 365d;
    add_header Cache-Control "public, max-age=31536000, immutable";
}

# ✅ Оптимизация выгрузки товаров из 1С
location ~* ^/(import\.php|import\.xml|offers\.xml|prices\.xml|rests\.xml)$ {
    client_max_body_size 512M; # Увеличиваем лимит загрузки файлов
    proxy_read_timeout 600s;
    proxy_send_timeout 600s;
    fastcgi_read_timeout 600s;
    fastcgi_send_timeout 600s;
    access_log off;
    error_log /var/www/httpd-logs/xn--e1afgfqo3f.com.error.log notice;
}

# ✅ Оптимизация FastCGI для PHP
location ~ \.php$ {
    fastcgi_buffers 64 64k;
    fastcgi_buffer_size 128k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 512k;
    fastcgi_read_timeout 600s;
    fastcgi_send_timeout 600s;
    client_max_body_size 512M;
}

# ✅ Оптимизация админки WordPress
location ~* /wp-admin/ {
    fastcgi_buffers 64 64k;
    fastcgi_buffer_size 128k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 512k;
    fastcgi_read_timeout 600;
    fastcgi_connect_timeout 600;
    fastcgi_send_timeout 600;
}

# ✅ Защита важных файлов WordPress
location ~* "/(\.|wp-config|wp-load|xmlrpc|htaccess|license|readme|backup|dump|db|sql|log|git).*$" {
    deny all;
}

location ~* "\.(sql|bak|old|log|tar|gz|zip|jsp|asp|sh|pl|cgi|htaccess)$" {
    deny all;
}

# ✅ Защита от сканирования сценариев WP
location ~* "(eval\(|eval\/|eval\.php|\/system\/|system32|passwd|boot\.ini)" {
    deny all;
}


Настройка Redis для WordPress

После установки плагина Redis Object Cache, добавьте следующие строки в файл wp-config.php:


define('WP_CACHE', true);
define('WP_REDIS_HOST', 'localhost');
define('WP_REDIS_PORT', '6379');
define('WP_CACHE_KEY_SALT', '_our_key');


Защита от DDoS-атак

Для оптимальной защиты от DDoS-атак при использовании ISP Manager рекомендуется следующая конфигурация:

Параметр Рекомендуемое значение Описание
Количество запросов в секунду 35-40 Максимальное число запросов с одного IP
Максимальный размер всплеска 150-200 Допустимое кратковременное превышение лимита

Важно: При настройке защиты от DDoS важно не блокировать легитимный трафик. Начните с менее строгих настроек и постепенно ужесточайте их при необходимости.

Проверка и мониторинг после миграции

  1. Создайте файл phpinfo.php для проверки настроек PHP
  2. Настройте логирование ошибок PHP: error_log = /var/www/logs/php_errors.log
  3. Регулярно проверяйте журналы на наличие ошибок и предупреждений
  4. Используйте инструменты анализа производительности, такие как Query Monitor

Заключение

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

После миграции регулярно проверяйте производительность сайта и при необходимости корректируйте настройки. С правильно настроенным PHP вы получите значительное преимущество в скорости работы сайта и SEO.

Во всех наших проектах мы решили использовать VDS от Бегет. Простата установки и оперативная поддержка.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

WebCreative Studio Logo
Создание сайтов в Донецке
Спасибо! Ваша заявка получена. Мы дадим обратную связь в ближайшее время.