Установка Nginx Mainline на Rocky Linux: полное руководство

Nginx Mainline — это самая свежая ветка веб-сервера, в которую попадают все новые функции, улучшения производительности и исправления ошибок. В отличие от стабильной ветки (stable), которая получает только критически важные заплатки безопасности, mainline подходит для большинства современных проектов. В ней вы сразу получаете обновлённую поддержку HTTP/2 и HTTP/3, улучшенные алгоритмы балансировки нагрузки и новые модули безопасности.

В этом руководстве мы установим Nginx Mainline на Rocky Linux 8, 9 или 10 из официального репозитория nginx.org. В итоге у вас будет запущенный веб-сервер с настроенным межсетевым экраном для веб-трафика.

Для кого: новички, веб-разработчики, сисадмины.
Что даст: самый свежий Nginx (mainline) с официального репозитория, настроенный firewall и автозапуск.

💡 Что такое Nginx Mainline? Это ветка с новейшими функциями (HTTP/3, новые алгоритмы балансировки). Она стабильнее, чем кажется — команда Nginx рекомендует её для большинства проектов.


Оглавление

1. Nginx Stable vs Mainline: что выбрать

Перед установкой важно понять разницу между двумя ветками, которые предоставляет nginx.org.

ХарактеристикаStableMainline
Что получаетТолько критические исправления и заплатки безопасностиВсе новые функции и улучшения
Частота обновленийРедко (только важное)Часто (новые версии)
Новые фичи (HTTP/3, новые модули)❌ Нет✅ Да
Рекомендация NginxДля консервативных продакшеновДля большинства развёртываний
Пример версии1.28.x1.29.x

Вывод для новичка:
Ставьте Mainline. Он не менее стабилен, а новые возможности получаете сразу. Stable нужен только если у вас жёсткие корпоративные требования «никаких изменений, только безопасность».


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

2.1 Обновляем все пакеты

sudo dnf upgrade --refresh -y

Что делает:

  • sudo — права администратора
  • dnf upgrade — обновляет все установленные пакеты
  • --refresh — перечитывает метаданные репозиториев (не берёт из кэша)
  • -y — автоматически отвечает «yes»

Зачем: чтобы система была актуальной перед установкой нового ПО. Это снижает риск конфликтов зависимостей.


2.2 Устанавливаем yum-utils

sudo dnf install -y yum-utils

Что делает: устанавливает пакет yum-utils, который даёт команду dnf config-manager

Зачем: dnf config-manager нужен для удобного включения/отключения репозиториев (мы будем использовать его для переключения между mainline и stable).


3. Удаление старого Nginx (если был)

Если Nginx уже установлен из стандартных репозиториев Rocky Linux (AppStream), его нужно удалить — иначе будут конфликты пакетов.

3.1 Проверяем, установлен ли Nginx

rpm -qa | grep nginx

Что делает:

  • rpm -qa — список всех установленных пакетов
  • grep nginx — ищет пакеты с nginx в имени

Зачем: узнать, есть ли уже Nginx и откуда он (из @appstream или другого репозитория).


3.2 Создаём резервную копию конфигурации

sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup

Что делает: копирует главный конфиг в файл с расширением .backup

Зачем: если у вас были важные настройки (виртуальные хосты, прокси), вы сможете их восстановить после переустановки.

Для полной резервной копии всех конфигов:

sudo cp -r /etc/nginx /etc/nginx.backup

Что делает: копирует весь каталог /etc/nginx в /etc/nginx.backup

Зачем: сохраняются все сайты (server blocks), SSL-сертификаты и дополнительные настройки.


3.3 Останавливаем и удаляем старый Nginx

sudo systemctl stop nginx

Что делает: останавливает работающий сервис Nginx

Зачем: нельзя удалять работающий сервис — могут остаться заблокированные файлы.

sudo dnf remove -y nginx nginx-*

Что делает: удаляет пакеты nginx и все, начинающиеся с nginx- (модули, зависимости)

Зачем: полное удаление старой установки перед установкой из официального репозитория.


4. Добавление официального репозитория nginx.org

4.1 Создаём файл репозитория

sudo tee /etc/yum.repos.d/nginx.repo <<'EOF'

[nginx-stable]

name=nginx stable repo baseurl=https://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true

[nginx-mainline]

name=nginx mainline repo baseurl=https://nginx.org/packages/mainline/centos/$releasever/$basearch/ gpgcheck=1 enabled=0 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true EOF

Что делает:

  • sudo tee ... <<'EOF' — создаёт файл и записывает в него содержимое до EOF
  • $releasever — переменная DNF, подставляет версию Rocky (8, 9, 10)
  • $basearch — архитектура (x86_64, aarch64)
  • gpgcheck=1 — проверять подписи пакетов (безопасность)
  • enabled=1 / enabled=0 — stable включён по умолчанию, mainline выключен
  • module_hotfixes=true — нужна для совместимости с модулями Rocky

Зачем: этот файл говорит DNF, откуда брать пакеты Nginx. Переменные $releasever и $basearch делают файл универсальным для всех версий Rocky.


4.2 Включаем репозиторий mainline

sudo dnf config-manager --set-enabled nginx-mainline

Что делает: меняет в файле /etc/yum.repos.d/nginx.repo строчку enabled=0 на enabled=1 для секции [nginx-mainline]

Зачем: теперь DNF будет видеть пакеты mainline и сможет их устанавливать.

Проверить, что включилось:

sudo dnf repolist | grep nginx

Что делает: показывает список включённых репозиториев, фильтруя по слову nginx

Ожидаемый вывод:

nginx-mainline    nginx mainline repo
nginx-stable      nginx stable repo

5. Установка Nginx Mainline

sudo dnf install -y nginx

Что делает: устанавливает пакет nginx из включённого репозитория (mainline)

Зачем: собственно установка веб-сервера.

Что произойдёт:

  • DNF предложит импортировать GPG-ключ Nginx
  • Важно проверить fingerprint: 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62
  • Если ключ совпадает — соглашайтесь (это гарантия, что пакеты настоящие, не поддельные)

5.1 Проверяем версию

nginx -v

Что делает: выводит версию установленного Nginx

Зачем: убедиться, что установилась именно mainline, а не stable.

Ожидаемый вывод для mainline:

nginx version: nginx/1.29.4

Если вы видите 1.28.x — значит, установился stable. Это случается, если вы забыли включить mainline-репозиторий. Исправляется переключением (см. раздел 8).


6. Запуск и автозагрузка

6.1 Запускаем Nginx

sudo systemctl start nginx

Что делает: запускает сервис Nginx прямо сейчас

Зачем: чтобы сервер начал работать без перезагрузки системы.


6.2 Добавляем в автозагрузку

sudo systemctl enable nginx

Что делает: создаёт символические ссылки, чтобы Nginx запускался автоматически при загрузке системы

Зачем: после перезагрузки сервера не нужно будет вручную запускать Nginx.


6.3 Проверяем статус

sudo systemctl status nginx

Что делает: показывает текущий статус сервиса: запущен ли, есть ли ошибки, PID процесса

Зачем: убедиться, что Nginx работает без ошибок.

Признаки успеха:

  • Active: active (running) — сервис работает
  • enabled в строке Loaded — автозагрузка настроена
  • Нет красных строк ERROR или FAIL

7. Настройка firewall для веб-трафика

Rocky Linux использует firewalld по умолчанию. Нужно открыть порты 80 (HTTP) и 443 (HTTPS).

7.1 Разрешаем HTTP и HTTPS

sudo firewall-cmd --permanent --zone=public --add-service=http

Что делает: добавляет правило для HTTP (порт 80) в постоянную конфигурацию

Зачем: без этого внешние пользователи не смогут зайти на ваш сайт.

sudo firewall-cmd --permanent --zone=public --add-service=https

Что делает: добавляет правило для HTTPS (порт 443)

Зачем: для защищённых соединений (SSL/TLS).

sudo firewall-cmd --reload

Что делает: перезагружает firewall с новыми правилами

Зачем: применять изменения без перезапуска всей системы.


7.2 Проверяем, что правила добавились

sudo firewall-cmd --list-services --zone=public

Что делает: показывает все разрешённые сервисы в публичной зоне

Ожидаемый вывод:

cockpit dhcpv6-client http https ssh

Зачем: убедиться, что http и https присутствуют.


7.3 Проверяем доступ к странице

Откройте в браузере http://IP-вашего-сервера

Что должно появиться:
Страница «Welcome to nginx!» — значит, всё работает.

Если не открывается — проверьте:

  • Nginx запущен: systemctl status nginx
  • Firewall: firewall-cmd --list-all
  • Не блокирует ли облачный провайдер (например, в DigitalOcean нужно открыть порты в панели управления)

8. Переключение между mainline и stable

8.1 С mainline на stable

# Останавливаем и удаляем текущий Nginx
sudo systemctl stop nginx
sudo dnf remove -y nginx

# Отключаем mainline, включаем stable
sudo dnf config-manager --set-disabled nginx-mainline
sudo dnf config-manager --set-enabled nginx-stable

# Устанавливаем stable
sudo dnf install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx

# Проверяем версию
nginx -v

Что делает: переключает репозитории и переустанавливает Nginx из stable-ветки

Зачем: если вы решили, что стабильность важнее новых функций.


8.2 Со stable на mainline

sudo systemctl stop nginx
sudo dnf remove -y nginx

sudo dnf config-manager --set-enabled nginx-mainline
sudo dnf config-manager --set-disabled nginx-stable

sudo dnf install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx

nginx -v

Что делает: обратное переключение

Зачем: если захотели новые функции обратно.


9. Обновление и удаление

9.1 Обновление Nginx

sudo dnf upgrade -y nginx

Что делает: обновляет только пакет nginx до последней версии в репозитории

Зачем: получать новые функции и исправления безопасности.

sudo systemctl restart nginx

Что делает: перезапускает Nginx

Зачем: после обновления бинарного файла нужно перезапустить сервис, чтобы новая версия подхватилась. reload тут не подойдёт — он только перечитывает конфиги.


9.2 Полное удаление Nginx

# Останавливаем и отключаем
sudo systemctl stop nginx
sudo systemctl disable nginx

# Удаляем пакет
sudo dnf remove -y nginx

# Удаляем репозиторий
sudo rm /etc/yum.repos.d/nginx.repo

# Удаляем конфиги (осторожно! все настройки пропадут)
sudo rm -rf /etc/nginx

Что делает: полная зачистка Nginx из системы

Зачем: если нужно переустановить «с чистого листа» или отказаться от Nginx.


10. Диагностика проблем

10.1 Порт 80 уже занят

Ошибка: bind() failed при запуске Nginx

sudo ss -tlnp | grep :80

Что делает: показывает, какой процесс слушает 80-й порт

Пример вывода:
LISTEN 0 511 *:80 *:* users:(("httpd",pid=1234,fd=4)) — это Apache.

Решение: остановить конфликтующий сервис:

sudo systemctl stop httpd
sudo systemctl start nginx

10.2 Ошибка в конфигурации Nginx

sudo nginx -t

Что делает: проверяет синтаксис конфигурационных файлов

Успешный вывод:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Если есть ошибки: Nginx покажет файл и номер строки, где проблема. Исправьте и проверьте снова.


10.3 Проблемы с репозиторием

cat /etc/yum.repos.d/nginx.repo

Что делает: показывает содержимое файла репозитория

Зачем: проверить, что baseurl содержит $releasever и $basearch (с долларами), а не конкретные цифры.

Неправильно:
baseurl=https://nginx.org/packages/centos/8/x86_64/

Правильно:
baseurl=https://nginx.org/packages/centos/$releasever/$basearch/


Чек-лист: всё готово к работе

# 1. Проверка версии (должна быть 1.29.x для mainline)
nginx -v

# 2. Проверка статуса (active running)
sudo systemctl status nginx

# 3. Проверка firewall
sudo firewall-cmd --list-services | grep -E "http|https"

# 4. Проверка портов
sudo ss -tlnp | grep -E ":80|:443"

# 5. Проверка через браузер
curl -I http://localhost
# Должен вернуть HTTP/1.1 200 OK или 302

Заключение

Вы установили самую свежую версию Nginx (mainline) из официального репозитория. Теперь у вас:

  • ✅ Веб-сервер с новейшими функциями (HTTP/3, современные алгоритмы)
  • ✅ Автоматический запуск при загрузке системы
  • ✅ Настроенный firewall (порты 80 и 443)
  • ✅ Возможность легко переключаться между mainline и stable
  • ✅ Инструменты диагностики на все случаи

Что дальше:

  • Настройте виртуальные хосты (server blocks)
  • Установите SSL-сертификаты (Let’s Encrypt)
  • Настройте reverse proxy для вашего приложения

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *