Представь, что тебе нужно развернуть быстрый и безопасный WordPress-сайт на Ubuntu сервере. В этом руководстве разберём базовый подход к установке WordPress на Ubuntu с использованием Nginx вместо Apache. Мы разберем каждый шаг — от настройки сервера до оптимизации производительности.
Что тебе понадобится перед началом
- Новый сервер Ubuntu 24.04 LTS с PHP 8.3 из штатных репозиториев; пример не предназначен для обновления уже работающего сайта
- Доступ по SSH с правами sudo
- Домен с DNS A/AAAA, указывающими на сервер; удалите лишние AAAA, если IPv6 не настроен
- Базовые знания командной строки Linux
Шаг 1: Обновление системы и установка базовых пакетов
Если сервер ещё не выбран, для отдельного WordPress-сайта можно рассмотреть VPS в Timeweb Cloud (партнёрская ссылка), сравнив ресурсы, стоимость и бэкапы. Перед изменениями сохрани данные, проверь SSH и консоль восстановления. Сначала обновим пакеты и установим необходимые инструменты:
sudo apt update
sudo apt upgrade -y
sudo apt install -y curl wget gnupg2 software-properties-common
Шаг 2: Установка и настройка Nginx для WordPress
Nginx — наш выбор для высокой производительности. Установим его и настроим базовую конфигурацию:
sudo apt install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx
Настройка Nginx для WordPress
Создадим конфигурационный файл для нашего сайта. Замени example.com на твой домен:
sudo nano /etc/nginx/sites-available/wordpress
Добавь следующую конфигурацию:
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
root /var/www/wordpress;
index index.php index.html index.htm;
client_max_body_size 64m;
location / {
try_files $uri $uri/ /index.php?$args;
}
# Запрет исполнения PHP в загрузках должен идти до общего PHP location.
location ~* /wp-content/uploads/.*\.php$ { deny all; }
location = /wp-config.php { deny all; }
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires max;
log_not_found off;
}
}
Для нового сайта создай symlink, если его ещё нет. Не открывай установщик WordPress посторонним: до завершения настройки ограничь доступ к сайту доверенной сетью или своим IP. При HTTP-проверке Certbot разреши отдельно challenge-путь, не снимая защиту установщика. Проверяем синтаксис:
sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
Шаг 3: Установка MySQL/MariaDB и создание базы данных
WordPress требует базу данных. Установим MariaDB (совместимую с MySQL) и создадим БД:
sudo apt install -y mariadb-server mariadb-client
sudo mysql_secure_installation
Создадим базу данных и пользователя для WordPress:
sudo mariadb
# Следующий SQL-блок выполняется внутри MariaDB, не в shell.
В консоли MariaDB выполни SQL ниже. Замени пароль новым уникальным значением, не используй пример буквально; тот же секрет позже укажи в wp-config.php. Для нового проекта база и пользователь ещё не должны существовать.
CREATE DATABASE wordpress_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wordpress_user'@'localhost' IDENTIFIED BY 'REPLACE_WITH_UNIQUE_PASSWORD';
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wordpress_user'@'localhost';
EXIT;
Шаг 4: Установка PHP и необходимых расширений
WordPress требует PHP с определенными расширениями. Для Ubuntu 24.04 используем PHP 8.3; проверь совместимость тем и плагинов:
sudo apt install -y php8.3-fpm php8.3-mysql php8.3-curl \
php8.3-gd php8.3-mbstring php8.3-xml \
php8.3-zip php8.3-opcache php8.3-intl
Настройка PHP-FPM для оптимальной производительности
Отредактируем настройки PHP-FPM для лучшей производительности WordPress:
sudo nano /etc/php/8.3/fpm/php.ini
Найди и измени следующие параметры:
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 72M
max_execution_time = 300
max_input_time = 300
sudo php-fpm8.3 -t && sudo systemctl reload php8.3-fpm
Шаг 5: Установка WordPress
Для нового сайта проверь, что /var/www/wordpress пуст. Не распаковывай архив поверх существующей установки без отдельного плана обновления и бэкапа. Скачай WordPress с официального сайта:
sudo mkdir -p /var/www/wordpress
cd /var/www/wordpress
sudo wget https://wordpress.org/latest.tar.gz
sudo tar -xzvf latest.tar.gz --strip-components=1
sudo rm latest.tar.gz
Настроим права доступа:
sudo chown -R root:www-data /var/www/wordpress
sudo find /var/www/wordpress -type d -exec chmod 755 {} \;
sudo find /var/www/wordpress -type f -exec chmod 644 {} \;
sudo install -d -o www-data -g www-data -m 755 /var/www/wordpress/wp-content/uploads
Настройка wp-config.php
Создадим файл конфигурации WordPress:
cd /var/www/wordpress
sudo cp wp-config-sample.php wp-config.php
sudo chown root:www-data wp-config.php
sudo chmod 640 wp-config.php
sudo nano wp-config.php
Обнови следующие строки с твоими данными:
define('DB_NAME', 'wordpress_db');
define('DB_USER', 'wordpress_user');
define('DB_PASSWORD', 'REPLACE_WITH_UNIQUE_PASSWORD');
define('DB_HOST', 'localhost');
Замени существующие восемь define ключей и солей в wp-config.php, не добавляй дубликаты. Сгенерируй уникальные значения на https://api.wordpress.org/secret-key/1.1/salt/):
define('AUTH_KEY', 'вставь_свой_уникальный_ключ');
define('SECURE_AUTH_KEY', 'вставь_свой_уникальный_ключ');
define('LOGGED_IN_KEY', 'вставь_свой_уникальный_ключ');
define('NONCE_KEY', 'вставь_свой_уникальный_ключ');
define('AUTH_SALT', 'вставь_свой_уникальный_ключ');
define('SECURE_AUTH_SALT', 'вставь_свой_уникальный_ключ');
define('LOGGED_IN_SALT', 'вставь_свой_уникальный_ключ');
define('NONCE_SALT', 'вставь_свой_уникальный_ключ');
Шаг 6: Настройка SSL/TLS (HTTPS)
Для безопасности настроим SSL с помощью Let's Encrypt:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com
Проверь установленный таймер/cron Certbot и тестовое продление. Команда ниже только тестирует процесс, а не создаёт расписание:
sudo certbot renew --dry-run
Шаг 7: Завершение установки через веб-интерфейс
После проверки HTTPS открой https://твой-домен и заверши установку, пока доступ к установщику ограничен. Затем проверь вход администратора и сними временное ограничение для посетителей. Не вводи пароль по открытому HTTP.
Данные для входа в мастер установки:
- Название сайта: Придумай название
- Имя пользователя: Не используй "admin"
- Пароль: Сгенерируй сложный пароль
- Email: Твой реальный email
Оптимизация производительности WordPress на Nginx
Кэширование в Nginx
open_file_cache кэширует файловые дескрипторы и метаданные, а не HTML WordPress. При необходимости добавь в server-блок и проверь nginx -t перед reload:
# Добавь в server блок:
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
Настройка кэширования в WordPress
Выбери один совместимый плагин кэширования, а не включай несколько одновременно. При выбранных правах на код его устанавливает и обновляет администратор контролируемым развёртыванием, а не PHP-процесс. Проверь поведение авторизованных пользователей, корзины и персональных страниц. Примеры:
- WP Rocket (премиум)
- W3 Total Cache (бесплатный)
- WP Super Cache (бесплатный)
Мониторинг и обслуживание
| Задача | Команда | Частота |
|---|---|---|
| Обновление системы | sudo apt update && sudo apt upgrade |
Еженедельно |
| Обновление WordPress | Администратором через контролируемое развёртывание после бэкапа и теста; код root-owned не обновляется PHP-процессом | При выходе обновлений |
| Проверка логов | sudo tail -f /var/log/nginx/error.log |
При проблемах |
| Резервное копирование | Согласованный дамп MariaDB + файлы сайта и wp-config.php, отдельная защищённая копия вне сервера; проверка восстановления | Ежедневно |
Для бэкапа останови изменения сайта, загрузки и фоновые задания на время согласованного снимка. Выполни дамп wordpress_db через mariadb-dump, затем сохрани файлы сайта и конфигурацию в закрытом каталоге вне document root. --single-transaction даёт согласованность для InnoDB, но не гарантирует согласованный дамп нетранзакционных таблиц. Проверь код возврата, размер копии и восстановление в отдельную БД/каталог; только после успешной проверки отправляй защищённую копию вне сервера. Расписание выбирай по допустимой потере данных, а не автоматически «раз в день».
Часто задаваемые вопросы (FAQ)
Почему выбирать Nginx вместо Apache для WordPress?
WordPress поддерживает Nginx и Apache. Выбор зависит от конфигурации, кэша, PHP, базы и нагрузки; универсального выигрыша Nginx нет. В этом руководстве используется Nginx с PHP-FPM.
Как настроить мультисайтовость WordPress на Nginx?
Multisite требует включения сети WordPress, выбора поддоменов или подкаталогов, DNS/сертификатов и соответствующих rewrite-правил Nginx. Одного wildcard server_name недостаточно; используй отдельную инструкцию WordPress Multisite и сначала проверь миграцию на копии сайта.
Как оптимизировать загрузку изображений в WordPress на Nginx?
Уменьши размеры и разрешение исходников, используй поддерживаемые современные форматы и responsive images. Gzip/brotli полезны прежде всего для текстовых ресурсов и не заменяют оптимизацию уже сжатых JPEG/PNG/WebP. Проверяй результат по размерам файлов и загрузке страницы.
Как защитить WordPress от брутфорс атак на Nginx?
Ограничение запросов требует двух частей: limit_req_zone объявляется в контексте http, а limit_req с именем этой зоны применяется в нужном контексте server/location. Сохрани существующую обработку PHP через FastCGI: отдельный location для wp-login.php без неё может сломать вход или раскрыть PHP-код. Подбери rate/burst по нагрузке, проверь конфигурацию nginx -t и протестируй вход на копии сайта перед включением; дополнительно используй MFA и защиту учётных записей.
Заключение
После проверки HTTPS, входа, загрузки файлов и восстановления бэкапа можно оценивать готовность сайта. Это базовая настройка. Для продакшн-среды обязательно:
- Настрой firewall, сначала разрешив фактический SSH-порт и проверив второй сеанс; затем доступ 80/443 и план отката
- Внедри систему резервного копирования
- Настрой мониторинг ресурсов сервера
- Регулярно обновляй WordPress и плагины
- Используй CDN для статического контента
Скорость, безопасность и масштабирование зависят от обновлений, плагинов, ресурсов и измерений нагрузки; одна базовая конфигурация этого не гарантирует. Для высоконагруженных проектов рассмотри возможность добавления кэширующего прокси (Varnish) и балансировщика нагрузки.