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