Гид по технологиям

Установка WordPress с Nginx на CentOS 8 и защита через Let's Encrypt

• 6 min read • WordPress • Обновлено 26 Nov 2025
WordPress + Nginx на CentOS 8 — установка и SSL
WordPress + Nginx на CentOS 8 — установка и SSL

Для кого эта инструкция

Кратко: для системных администраторов и разработчиков, которые хотят разместить WordPress на CentOS 8 с Nginx и автоматически продлевать сертификат. Определения: LEMP — Linux + Nginx (Engine-X) + MariaDB + PHP-FPM.

Содержание

  • Предварительные требования
  • Отключение SELinux (если требуется)
  • Установка стека LEMP
  • Настройка базы данных WordPress
  • Загрузка и подготовка WordPress
  • Конфигурация Nginx для WordPress
  • Доступ к установщику и проверка
  • Установка Let’s Encrypt и получение сертификата
  • Автоматическое продление сертификатов
  • Дополнительная защита и рекомендации
  • Типичные проблемы и их решения
  • Рольные чек-листы
  • Критерии приёмки
  • Тест-кейсы и краткая методология
  • Глоссарий 1 строкой
  • Итог

Предварительные требования

  • Сервер с CentOS 8 (root-доступ).
  • Зарегистрированное доменное имя, указывающее на IP сервера.
  • Резервная копия важных данных перед изменениями.

Важно: в CentOS 8 по умолчанию включён SELinux — в некоторых окружениях его можно оставить включённым, но в этой инструкции показан вариант с отключением для упрощения. Рассмотрите целесообразность для продакшена.

Отключение SELinux

Если вы решаете временно отключить SELinux для простоты настройки, отредактируйте файл:

nano /etc/selinux/config

Измените строку на:

SELINUX=disabled

Сохраните файл и перезагрузите сервер.

Important: Отключение SELinux снимает дополнительный уровень защиты. В продакшене лучше настроить правильные контексты SELinux, чем отключать его.

Установка LEMP (Nginx, MariaDB, PHP-FPM)

Установите необходимый набор пакетов:

yum install nginx php php-cli php-curl php-zip php-mbstring php-mysqlnd php-fpm curl unzip mariadb-server -y

Запустите сервисы и включите автозапуск:

systemctl start nginx
systemctl enable nginx
systemctl start mariadb
systemctl enable mariadb
systemctl start php-fpm
systemctl enable php-fpm

Проверить статус PHP-FPM:

systemctl status php-fpm

Ожидаемый результат: сервис активен (running). Если нет — проверьте журналы через journalctl -u php-fpm.

Настройка базы данных для WordPress

MariaDB по умолчанию нуждается в базовой настойке безопасности. Запустите скрипт:

mysql_secure_installation

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

Затем войдите в консоль MariaDB:

mysql -u root -p

Создайте базу и пользователя для WordPress (замените имена и пароль на собственные):

MariaDB [(none)]> CREATE DATABASE wpdb;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON wpdb.* TO 'wpuser'@'localhost' IDENTIFIED BY 'password';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> EXIT;

Совет: используйте сложный пароль и при необходимости ограничьте доступ по хостам.

Загрузка и подготовка WordPress

Перейдите в директорию веб-рендера и скачайте последнюю версию:

cd /var/www/html
wget https://wordpress.org/latest.tar.gz

Распакуйте и установите права:

tar -xvzf latest.tar.gz
chown -R nginx: /var/www/html/wordpress/

Задайте файл конфигурации:

cd /var/www/html/wordpress
cp wp-config-sample.php wp-config.php
nano wp-config.php

Укажите данные доступа к базе:

define( 'DB_NAME', 'wpdb' );
define( 'DB_USER', 'wpuser' );
define( 'DB_PASSWORD', 'password' );
define( 'DB_HOST', 'localhost' );

Дополнительно: настройте уникальные ключи безопасности AUTH_KEY и пр. Их можно сгенерировать на https://api.wordpress.org/secret-key/1.1/salt/ и вставить в wp-config.php.

Конфигурация Nginx для WordPress

Создайте виртуальный хост:

nano /etc/nginx/conf.d/wordpress.conf

Добавьте конфигурацию (замените example.com на ваш домен):

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

    access_log /var/log/nginx/example.com.access.log;
    error_log /var/log/nginx/example.com.error.log;

    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

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

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index   index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        expires max;
        log_not_found off;
    }

}

Проверьте конфигурацию Nginx и перезагрузите:

nginx -t
systemctl restart nginx

Совет: для сайтов с высокой нагрузкой рассмотрите включение gzip, настройку кеширования и лимитов буфера в nginx.conf.

Доступ к установщику WordPress

Откройте в браузере: http://example.com (замените example.com на ваш домен). Следуйте мастеру установки: введите название сайта, учётную запись администратора, пароль и e-mail. После установки авторизуйтесь.

Мастер установки WordPress

Успешная установка WordPress

Страница входа WordPress

Панель управления WordPress

ALT-примечание: изображения отображают последовательность: мастер установки, сообщение об успешной установке, форма входа и панель администратора.

Установка Let’s Encrypt (Certbot) и получение SSL

Certbot может не быть в репозиториях CentOS 8. Простейший способ — скачать скрипт certbot-auto и запустить его. Выполните:

wget https://dl.eff.org/certbot-auto
mv certbot-auto /usr/local/bin/certbot-auto
chown root /usr/local/bin/certbot-auto
chmod 0755 /usr/local/bin/certbot-auto

Запустите получение сертификата (пример для Apache в оригинале; для Nginx используйте –nginx если поддерживается, либо получайте через standalone и затем вручную правьте конфиг):

certbot-auto --nginx -d example.com

Если certbot-auto не поддерживает автоматическую правку Nginx в вашей сборке, используйте режим certonly и вручную добавьте редирект с HTTP на HTTPS в конфигурацию Nginx.

После успешного получения вы увидите путь к сертификатам, например:

/etc/letsencrypt/live/example.com/fullchain.pem
/etc/letsencrypt/live/example.com/privkey.pem

Let’s Encrypt выдаёт сертификат на 90 дней; автоматическое продление обязательно.

Настройка автоматического продления сертификатов

Добавьте cron задачу, которая запускает продление дважды в день с случайной задержкой, чтобы снизить нагрузку на CA:

crontab -e

Добавьте строку:

0 0,12 * * * root python -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/local/bin/certbot-auto renew

Проверка: выполните вручную:

/usr/local/bin/certbot-auto renew --dry-run

Если dry-run успешен — cron будет работать корректно.

Дополнительная защита и рекомендации

  • Используйте HTTPS-форсинг (редирект с HTTP на HTTPS) и HSTS при уверенности, что все ресурсы доступны по HTTPS.
  • Ограничьте доступ к файлам конфигурации: wp-config.php — права 640, владелец nginx.
  • Добавьте правило в Nginx, чтобы запретить доступ к .htaccess и к файлам конфигурации:
location ~* /\.(ht|git) {
    deny all;
}
  • Обновляйте ядро WordPress, темы и плагины регулярно.
  • Используйте сложные пароли и двухфакторную аутентификацию для администраторов.
  • Настройте регулярный бэкап файлов и базы данных (обязательно тестируйте восстановление).
  • Настройте лимиты по числу одновременных соединений и rate limiting в Nginx при необходимости.

Security hardening (кратко): отключите XML-RPC, если не нужен; ограничьте доступ к /wp-admin по IP (если фиксированы адреса); применяйте WAF (ModSecurity или облачный WAF).

Типичные проблемы и решения

  • 502 Bad Gateway: проверьте, что php-fpm работает и сокет указан верно (unix:/run/php-fpm/www.sock).
  • 403 Forbidden: проверьте права доступа к директориям и владельца (nginx:).
  • Белая страница (500): включите WP_DEBUG в wp-config.php временно для диагностики.
  • Проблемы с SSL после установки: проверьте, что fullchain.pem и privkey.pem читаемы и путь в конфиге nginx верный; выполните nginx -t.

Рольные чек-листы

  • Список для системного администратора:

    • Проверить DNS A-запись домена.
    • Установить и запустить Nginx, MariaDB, PHP-FPM.
    • Настроить брандмауэр (firewalld/iptables) для портов 80 и 443.
    • Настроить автоматическое обновление сертификатов.
  • Список для разработчика/интегратора:

    • Проверить конфигурацию fastcgi и права на файлы.
    • Настроить environment variables и file permissions.
    • Провести нагрузочное и функциональное тестирование.
  • Список для контент-менеджера:

    • Создать резервную учётную запись администратора.
    • Проверить корректность отображения HTTPS-версии сайта.
    • Протестировать формы и отправку почты.

Критерии приёмки

  • Сайт доступен по HTTPS без ошибок смешанного контента.
  • WordPress может подключаться к базе и работать без ошибок.
  • Автоматическое обновление сертификата проходит успешно (dry-run).
  • Резервная копия сайта сделана и восстановление протестировано.

Тест-кейсы и проверка приёма

  1. Переход на https://example.com — сайт открывается, padlock виден.
  2. Авторизация под администратором — успешный вход.
  3. Создание поста и проверка отображения на фронтенде.
  4. Прогон certbot renew –dry-run — возвращает успех.
  5. Отключение php-fpm — nginx возвращает 502, после включения сервис восстанавливается.

Критерий успеха: все тест-кейсы проходят без ручного вмешательства в течение 24 часов после деплоя.

Альтернативные подходы

  • Вместо Nginx можно использовать Apache + mod_php (простейшая совместимость с .htaccess).
  • Для продакшена рассмотрите контейнеризацию (Docker, Kubernetes) и управление сертификатами через ingress controller (например cert-manager).
  • Использование управляемого хостинга WordPress (PaaS) избавляет от ряда инфраструктурных задач, но ограничивает контроль.

Когда этот подход не подходит:

  • Если политика безопасности требует включённого SELinux с конкретными контекстами; тогда лучше настроить SELinux, а не отключать.
  • Если у вас многосерверная архитектура с балансировщиком — SSL может быть терминирован на LB вместо Nginx.

Мини-методология развертывания (быстрая последовательность)

  1. Подготовить сервер и DNS.
  2. Установить LEMP и убедиться в работе сервисов.
  3. Настроить базу данных и пользователя.
  4. Развернуть WordPress и права доступа.
  5. Настроить Nginx и проверить доступ по HTTP.
  6. Получить SSL, настроить редирект и автопродление.
  7. Проверить бэкапы и мониторинг.

Короткий глоссарий

  • LEMP — Linux + Nginx + MariaDB + PHP-FPM.
  • Certbot — клиент для получения сертификатов Let’s Encrypt.
  • PHP-FPM — менеджер процессов PHP для Nginx.

Итог

Вы развернули WordPress на CentOS 8 с Nginx, настроили базу данных, подготовили конфигурации и обеспечили сайт SSL-сертификатом Let’s Encrypt с автоматическим продлением. Дальнейшие шаги — настроить бэкапы, мониторинг, обновления и применить дополнительные меры безопасности для продакшена.

Summary:

  • Проверьте конфигурации и права.
  • Тестируйте продление сертификатов.
  • Настройте регулярные бэкапы и обновления.

Notes: если вы используете другой дистрибутив или более новую версию ОС, некоторые пакеты и пути могут отличаться; проверяйте документы дистрибутива.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро