Home » Установка WordPress с Nginx на Ubuntu
Установка WordPress с Nginx на Ubuntu

Установка WordPress с Nginx на Ubuntu

Создавать сайты на WordPress с Nginx — это как собирать кастомную сборку компьютера: быстро, мощно и очень гибко. Вместо готовых решений с Apache получаешь production-ready стек, который выдерживает высокие нагрузки и потребляет минимум ресурсов. Эта статья поможет разобраться с установкой и настройкой связки WordPress + Nginx + PHP-FPM на Ubuntu, не наступая на грабли новичков.

Nginx отлично подходит для WordPress благодаря эффективной обработке статических файлов и низкому потреблению памяти. Особенно это актуально для VPS с ограниченными ресурсами, где каждый мегабайт RAM на счету. Разберём весь процесс от установки до тонкой настройки.

Как это работает: архитектура связки

Nginx работает как reverse proxy, передавая PHP-запросы в PHP-FPM процесс через FastCGI. Это даёт преимущества перед модульной архитектурой Apache:

  • Меньше потребление памяти — PHP процессы отделены от веб-сервера
  • Лучшая производительность — статические файлы обрабатываются напрямую Nginx
  • Масштабируемость — можно настроить несколько PHP-FPM пулов
  • Безопасность — изоляция PHP от веб-сервера

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

Начинаем с обновления пакетов и установки необходимых компонентов. Для этого гайда понадобится VPS сервер с Ubuntu 20.04/22.04 или выделенный сервер для высоконагруженных проектов.

sudo apt update && sudo apt upgrade -y
sudo apt install nginx mysql-server php-fpm php-mysql php-xml php-mbstring php-curl php-gd php-zip php-intl unzip curl -y

Проверяем версии установленных пакетов:

nginx -v
php -v
mysql --version

Настройка MySQL

Запускаем скрипт безопасной установки MySQL:

sudo mysql_secure_installation

Создаём базу данных и пользователя для WordPress:

sudo mysql -u root -p
CREATE DATABASE wordpress_db;
CREATE USER 'wp_user'@'localhost' IDENTIFIED BY 'strong_password_here';
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wp_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Настройка PHP-FPM

Находим версию PHP и редактируем конфигурацию пула:

php -v
sudo nano /etc/php/8.1/fpm/pool.d/www.conf

Ключевые параметры для оптимизации:

pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500

Также в php.ini увеличиваем лимиты:

sudo nano /etc/php/8.1/fpm/php.ini

upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
memory_limit = 256M

Перезапускаем PHP-FPM:

sudo systemctl restart php8.1-fpm
sudo systemctl enable php8.1-fpm

Скачивание и установка WordPress

Создаём директорию для сайта и скачиваем WordPress:

sudo mkdir -p /var/www/your-site.com
cd /tmp
curl -LO https://wordpress.org/latest.tar.gz
tar xzvf latest.tar.gz
sudo cp -R wordpress/* /var/www/your-site.com/
sudo chown -R www-data:www-data /var/www/your-site.com/
sudo chmod -R 755 /var/www/your-site.com/

Создаём wp-config.php из шаблона:

cd /var/www/your-site.com/
sudo cp wp-config-sample.php wp-config.php
sudo nano wp-config.php

Заполняем данные базы данных:

define('DB_NAME', 'wordpress_db');
define('DB_USER', 'wp_user');
define('DB_PASSWORD', 'strong_password_here');
define('DB_HOST', 'localhost');

Настройка Nginx

Создаём конфигурацию виртуального хоста:

sudo nano /etc/nginx/sites-available/your-site.com

Базовая конфигурация для WordPress:

server {
    listen 80;
    server_name your-site.com www.your-site.com;
    root /var/www/your-site.com;
    index index.php index.html index.htm;
    
    # Логи
    access_log /var/log/nginx/your-site.com.access.log;
    error_log /var/log/nginx/your-site.com.error.log;
    
    # Безопасность
    server_tokens off;
    
    # Основные локации
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
    
    # PHP обработка
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    
    # Кэширование статики
    location ~* \.(css|js|png|jpg|jpeg|gif|ico|svg)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
    
    # Запрет доступа к системным файлам
    location ~ /\. {
        deny all;
    }
    
    location ~* /(?:uploads|files)/.*\.php$ {
        deny all;
    }
    
    location ~ /wp-config.php {
        deny all;
    }
}

Активируем сайт:

sudo ln -s /etc/nginx/sites-available/your-site.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

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

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

# Сжатие
gzip on;
gzip_vary on;
gzip_min_length 1024;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;

# Буферизация
client_body_buffer_size 128k;
client_max_body_size 64m;
client_header_buffer_size 1k;
large_client_header_buffers 4 4k;
output_buffers 1 32k;
postpone_output 1460;

# FastCGI кэш
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=wordpress:100m inactive=60m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

Сравнение с альтернативными решениями

Критерий Nginx + PHP-FPM Apache + mod_php LiteSpeed
Потребление RAM Низкое (50-100MB) Высокое (200-500MB) Среднее (100-200MB)
Производительность Высокая Средняя Очень высокая
Сложность настройки Средняя Низкая Высокая
Гибкость Высокая Средняя Высокая
Стоимость Бесплатно Бесплатно Платно

Автоматизация и скрипты

Создаём скрипт для автоматического развёртывания:

#!/bin/bash
# wordpress-install.sh

DOMAIN=$1
DB_NAME="${DOMAIN//./_}_db"
DB_USER="${DOMAIN//./_}_user"
DB_PASS=$(openssl rand -base64 32)

# Создание базы данных
mysql -u root -p -e "CREATE DATABASE $DB_NAME;"
mysql -u root -p -e "CREATE USER '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';"
mysql -u root -p -e "GRANT ALL PRIVILEGES ON $DB_NAME.* TO '$DB_USER'@'localhost';"

# Скачивание WordPress
cd /tmp
curl -LO https://wordpress.org/latest.tar.gz
tar xzvf latest.tar.gz
sudo cp -R wordpress/* /var/www/$DOMAIN/
sudo chown -R www-data:www-data /var/www/$DOMAIN/

# Настройка wp-config.php
cd /var/www/$DOMAIN/
sudo cp wp-config-sample.php wp-config.php
sudo sed -i "s/database_name_here/$DB_NAME/" wp-config.php
sudo sed -i "s/username_here/$DB_USER/" wp-config.php
sudo sed -i "s/password_here/$DB_PASS/" wp-config.php

echo "WordPress установлен для $DOMAIN"
echo "БД: $DB_NAME, Пользователь: $DB_USER, Пароль: $DB_PASS"

Интересные факты и нестандартные применения

Nginx может работать как кэширующий прокси перед WordPress, что даёт прирост производительности в 10-50 раз. Также можно настроить микрокэширование для авторизованных пользователей:

set $skip_cache 0;
if ($request_method = POST) {
    set $skip_cache 1;
}
if ($query_string != "") {
    set $skip_cache 1;
}
if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") {
    set $skip_cache 1;
}
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
    set $skip_cache 1;
}

Мониторинг и отладка

Полезные команды для диагностики:

# Проверка статуса сервисов
sudo systemctl status nginx php8.1-fpm mysql

# Мониторинг логов в реальном времени
sudo tail -f /var/log/nginx/your-site.com.error.log
sudo tail -f /var/log/php8.1-fpm.log

# Проверка подключений к базе данных
sudo netstat -tlnp | grep :3306

# Тестирование PHP-FPM
sudo -u www-data php /var/www/your-site.com/index.php

Безопасность

Дополнительные меры защиты:

  • Fail2ban — блокировка IP при атаках
  • ModSecurity — WAF для Nginx
  • SSL/TLS — обязательное шифрование
  • Регулярные обновления — WordPress, плагины, система
sudo apt install fail2ban
sudo systemctl enable fail2ban

# Настройка правил для WordPress
sudo nano /etc/fail2ban/jail.local

Заключение и рекомендации

Связка WordPress + Nginx + PHP-FPM — это мощное решение для проектов любого масштаба. Основные преимущества:

  • Производительность — в 2-3 раза быстрее Apache
  • Экономия ресурсов — меньше потребление RAM и CPU
  • Масштабируемость — легко добавить кэширование и балансировку
  • Гибкость — тонкая настройка под конкретные задачи

Используйте это решение для:

  • Высоконагруженных сайтов
  • Проектов с ограниченными ресурсами
  • Мультисайтовых конфигураций
  • API-бэкендов на WordPress

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

Полезные ссылки для дальнейшего изучения:


В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked