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.
| Характеристика | Stable | Mainline |
|---|---|---|
| Что получает | Только критические исправления и заплатки безопасности | Все новые функции и улучшения |
| Частота обновлений | Редко (только важное) | Часто (новые версии) |
| Новые фичи (HTTP/3, новые модули) | ❌ Нет | ✅ Да |
| Рекомендация Nginx | Для консервативных продакшенов | Для большинства развёртываний |
| Пример версии | 1.28.x | 1.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 для вашего приложения