Переход Apache → Nginx для WordPress: полное руководство и практические примеры

Краткое содержание

Почему стоит переходить с Apache на Nginx

Apache – проверенный веб‑сервер, но в 2026‑м году Nginx обгоняет его по производительности, потреблению памяти и гибкости при работе с динамическим контентом WordPress. Основные преимущества:

  • Асинхронная обработка запросов → до 30% ускорения при большом трафике.
  • Встроенный статический кеш и поддержка Memcached без сторонних модулей.
  • Более простая конфигурация SSL и HTTP/2.
  • Меньшее потребление RAM, что критично на VPS‑хостинге (как правильно выбрать VPS).

Подготовка сервера к миграции

1. Установка Nginx и проверка совместимости

На большинстве дистрибутивов Debian/Ubuntu достаточно выполнить:

sudo apt update
sudo apt install nginx

Убедитесь, что установлен PHP‑FPM (рекомендуем PHP 8.2):

sudo apt install php-fpm php-mysql

2. Перенос файлов сайта

Скопируйте wp‑content, wp‑config.php и остальные файлы в каталог, обслуживаемый Nginx (по‑умолчанию /var/www/html). Не меняйте права доступа: файлы – 644, папки – 755.

3. Отключение Apache

После проверки, что Nginx успешно обслуживает статические файлы, отключите Apache, чтобы избежать конфликта портов:

sudo systemctl stop apache2
sudo systemctl disable apache2

Конвертация .htaccess в правила Nginx

3.1. Основные правила WordPress

В Apache большинство перенаправлений находится в файле .htaccess. Для Nginx их нужно перенести в блок location / конфигурации сайта:

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/html;

    index index.php index.html index.htm;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ .php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_intercept_errors on;
    }

    location ~* .(js|css|png|jpg|jpeg|gif|svg|ico)$ {
        expires 30d;
        access_log off;
    }
}

3.2. Перенос правил из плагинов и кастомных директив

Если в .htaccess присутствуют правила для плагинов (например, WP‑Rocket, Yoast SEO), их нужно адаптировать вручную. Пример редиректа с www на без www:

if ($host ~* ^www.(.*)$) {
    return 301 $scheme://$1$request_uri;
}

Для принудительного HTTPS:

if ($scheme != "https") {
    return 301 https://$host$request_uri;
}

3.3. Защита wp‑admin и wp‑login

Ограничим доступ к административной панели по IP (пример):

location ~* ^/wp-(admin|login).php$ {
    allow 192.168.1.0/24;   # ваш диапазон
    deny all;
    include fastcgi_params;
    fastcgi_pass unix:/run/php/php8.2-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

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

4.1. Проверка доступности сайта

Выполните curl -I http://example.com и убедитесь, что получаете статус 200 OK. Затем проверьте https после включения SSL.

4.2. Тестирование пермалинков

Перейдите в админке WordPress → Settings → Permalinks и сохраните текущие настройки. Это заставит WordPress записать правила в базу и проверит их работу через Nginx.

4.3. Логирование ошибок

Включите отладочный лог в /etc/nginx/nginx.conf:

error_log /var/log/nginx/error.log notice;

При появлении 404‑ошибок проверьте, что запросы попадают в блок try_files.

4.4. Интеграция с системой логирования WordPress

Для полного аудита действий пользователей используйте WordPress логирование. Оно поможет отследить, какие запросы приходят к Nginx и как обрабатываются PHP‑скрипты.

4.5. Финальная проверка производительности

Сравните время отклика до и после миграции с помощью ab или wrk. Ожидаемый прирост – 15‑30 % при одинаковой нагрузке.

Полезные ресурсы и дальнейшее развитие

После успешного перехода можно продолжить оптимизацию:

Следуя этим шагам, ваш сайт получит более стабильную работу, экономию ресурсов и готовность к росту трафика.

❓ Часто задаваемые вопросы

Можно ли использовать один и тот же конфигурационный файл .htaccess в Nginx?

Нет. Nginx не читает .htaccess. Все правила нужно перенести в блоки server/location конфигурации Nginx вручную.

Как включить поддержку .htaccess‑совместимых правил без перезапуска Nginx?

В Nginx нет динамической подгрузки .htaccess. После изменения конфигурации необходимо выполнить nginx -s reload.

Что делать, если после миграции перестали работать кастомные постоянные ссылки?

Проверьте блок try_files $uri $uri/ /index.php?$args; в конфигурации и сохраните настройки пермалинков в админке WordPress.

Нужен ли отдельный сервер для PHP‑FPM при работе с Nginx?

Не обязательно. На небольших проектах PHP‑FPM может работать на том же сервере, но для высокой нагрузки рекомендуется вынести его на отдельный хост.