- Home » 
 
      
								Установка 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
 
Не забывайте про регулярное обслуживание: обновления, мониторинг логов, оптимизация базы данных. Правильно настроенная связка будет работать стабильно годами, обеспечивая отличную производительность даже при высоких нагрузках.
Полезные ссылки для дальнейшего изучения:
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.