Обновление Nginx на Ubuntu: полное руководство 2026 (от 1.24 до 1.26 без простоя) | AdminWiki

Обновление Nginx на Ubuntu: полное руководство 2026 (от 1.24 до 1.26 без простоя)

08 августа 2026 11 мин. чтения

Версия Nginx 1.26 принесла критически важные исправления безопасности: устранены уязвимости в модулях HTTP/3 и SSL-терминации, которые потенциально позволяли обходить ACL-правила. Обновление до актуальной стабильной ветки - это не просто получение новых функций, а закрытие известных векторов атак на веб-сервер. Этот материал содержит проверенный на практике алгоритм перехода с Nginx 1.24 на 1.26 на Ubuntu 22.04 и 24.04 LTS.

Вы получите два рабочих сценария: обновление через официальный репозиторий Nginx для доступа к самым свежим сборкам и использование стандартных пакетов Ubuntu для максимальной совместимости с системой. Каждый шаг включает конкретные команды, ожидаемый вывод и действия при отклонениях. Разбор типичных ошибок и план отката помогут завершить процедуру за 15-20 минут, даже если что-то пойдёт не по плану.

Выбор стратегии обновления: официальный репозиторий или пакеты Ubuntu

Администратор принимает решение об источнике пакетов до начала любых операций с сервером. От этого выбора зависит доступная версия Nginx, частота получения патчей безопасности и совместимость с остальными компонентами системы.

Параметр Официальный репозиторий Nginx Стандартные репозитории Ubuntu
Доступная версия 1.26.x (стабильная ветка) 1.24.x (зависит от выпуска дистрибутива)
Частота обновлений В течение нескольких дней после релиза Только критические исправления безопасности, бэкпортированные мейнтейнерами Ubuntu
Поддержка HTTP/3 Полная, из коробки Ограниченная или отсутствует в старых LTS-релизах
Совместимость с системными библиотеками Высокая, но возможны конфликты при установке сторонних модулей Гарантированная, так как пакет собран под конкретную версию Ubuntu
Проверка подписи пакетов Через официальный GPG-ключ Nginx Через стандартную цепочку доверия Ubuntu
Типичный сценарий Production-окружения с высокими требованиями к безопасности, проекты на HTTP/3 Стабильные серверы, где приоритет - отсутствие неожиданных изменений поведения

Рекомендация: для публичных серверов, обрабатывающих пользовательские данные, выбирайте официальный репозиторий. Версия 1.26 закрывает CVE-2024-7341 и CVE-2025-23109 - эксплуатировать эти уязвимости можно без аутентификации. Стандартные пакеты Ubuntu получат эти исправления с задержкой в 2-4 недели. Для внутренних сервисов за VPN или в DMZ, где вектор атаки ограничен, допустимо оставаться на системных пакетах. Далее в статье детально разбирается сценарий с официальным репозиторием как наиболее актуальный.

Подготовка к обновлению: аудит, бэкап и проверка совместимости

Пропуск подготовительного этапа - основная причина аварийных ситуаций при обновлении. Три обязательных действия перед любыми изменениями: зафиксировать текущее состояние, сохранить конфигурацию, оценить риски несовместимости.

Начните с аудита текущей версии и загруженных модулей. Команда nginx -V выводит полную информацию о сборке, включая аргументы configure и список динамических модулей. Сохраните этот вывод в файл - он потребуется при откате или пересборке модулей.

nginx -V 2>&1 | tee ~/nginx_version_backup.txt

Обратите внимание на аргумент --with-ld-opt и пути к динамическим модулям. Если вы используете самосборную версию Nginx с кастомными плагинами, процесс обновления отличается - для этого случая есть отдельное руководство по пересборке Nginx с сохранением сторонних модулей.

Резервное копирование конфигурации: что и как сохранить

Полный бэкап защищает от потери не только конфигурационных файлов, но и кастомных страниц ошибок, сниппетов и сертификатов. Копируйте директории рекурсивно с сохранением прав доступа.

# Создание архива с временной меткой
BACKUP_DATE=$(date +%Y%m%d_%H%M%S)
sudo tar -czpf /backup/nginx_backup_${BACKUP_DATE}.tar.gz \
  /etc/nginx \
  /usr/share/nginx/html \
  /var/log/nginx

Что входит в этот архив и почему это важно:

  • /etc/nginx - основной конфигурационный каталог: nginx.conf, сайты, сниппеты, параметры SSL. При обновлении пакет может перезаписать дефолтные файлы, если они не были изменены.
  • /usr/share/nginx/html - дефолтная директория для статики. Содержит кастомные страницы ошибок (50x.html) и тестовые заглушки.
  • /var/log/nginx - опционально. Логи полезны для постмортем-анализа, если после обновления что-то пошло не так.

Скопируйте архив на отдельную машину или в облачное хранилище. Локальный бэкап на том же сервере бесполезен при отказе диска или удалении пакетным менеджером. Полный чек-лист резервного копирования с автоматизацией через скрипт разобран в статье «Обновление Nginx: чек-лист резервного копирования и быстрого восстановления».

Проверка сторонних модулей и директив на совместимость с Nginx 1.26

Динамические модули, скомпилированные под Nginx 1.24, не загрузятся с версией 1.26 из-за изменения ABI (Application Binary Interface). Это не баг, а архитектурная особенность - каждый значительный релиз Nginx меняет внутренние структуры данных, и модули должны быть пересобраны под целевую версию.

Получите список загруженных динамических модулей:

ls -la /etc/nginx/modules-enabled/
# или для самосборной версии
nginx -V 2>&1 | grep -oP 'load_module\s+\K[^;]+'

Типичные проблемные модули и их статус для версии 1.26:

  • ngx_pagespeed - официальная поддержка прекращена в 2023 году. Модуль несовместим с Nginx 1.26. Альтернатива: вынести оптимизацию на уровень CDN.
  • nginx-module-njs - полностью совместим. Обновляется синхронно с основным пакетом в официальном репозитории.
  • nginx-module-geoip2 - совместим, но требует переустановки из репозитория Nginx (пакет nginx-module-geoip2).
  • nginx-module-brotli - совместим. Доступен в официальном репозитории как nginx-module-brotli.

Проверьте конфигурацию на устаревшие директивы до обновления. Некоторые параметры, помеченные как deprecated в 1.24, полностью удалены в 1.26:

# Проверка текущей конфигурации на устаревшие директивы
grep -rE '(ssl_protocols.*TLSv1[^.]|ssl_prefer_server_ciphers.*off|proxy_ssl_session_reuse)' /etc/nginx/

Если grep находит совпадения, обновите синтаксис до обновления пакетов. Файл с изменениями директив лежит в официальном CHANGELOG Nginx, раздел «Changes with nginx 1.26».

Настройка официального репозитория Nginx с проверкой GPG-ключей

Официальный репозиторий Nginx предоставляет пакеты, подписанные GPG-ключом организации. Проверка подписи гарантирует, что пакет не был подменён в процессе доставки и действительно собран мейнтейнерами Nginx. Без этой проверки менеджер пакетов Ubuntu откажется устанавливать пакеты из стороннего источника.

Процесс подключения репозитория одинаков для Ubuntu 22.04 и 24.04 LTS. Выполните следующие шаги от root или через sudo:

# 1. Установка зависимостей для безопасной работы с репозиториями
sudo apt update
sudo apt install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring

# 2. Загрузка и добавление официального GPG-ключа Nginx
curl -fsSL https://nginx.org/keys/nginx_signing.key | sudo gpg --dearmor -o /usr/share/keyrings/nginx-archive-keyring.gpg

# 3. Проверка отпечатка ключа (должен совпадать с опубликованным на nginx.org)
sudo gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg

Отпечаток ключа на август 2026 года: 573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62. Сверьте его с выводом последней команды. Расхождение означает компрометацию ключа или атаку «человек посередине» - прекратите процедуру и скачайте ключ через другой канал.

# 4. Добавление репозитория в sources.list.d
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/mainline/ubuntu $(lsb_release -cs) nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list > /dev/null

# 5. Настройка приоритета репозитория (опционально, но рекомендуется)
echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900" \
| sudo tee /etc/apt/preferences.d/99nginx

Параметр Pin-Priority: 900 указывает apt выбирать пакеты из репозитория Nginx, даже если версия в системных репозиториях новее. Это предотвращает случайный откат при обновлении системы.

После добавления репозитория обновите индекс пакетов и убедитесь, что источник виден системе:

sudo apt update
apt-cache policy nginx

Вывод должен показать два источника: стандартный репозиторий Ubuntu и nginx.org. Кандидатом на установку должна быть версия из nginx.org с приоритетом 900.

Пошаговый сценарий обновления Nginx с 1.24 до 1.26 без простоя

Этот алгоритм минимизирует время недоступности сервера до 1-2 секунд - ровно столько длится переключение контекста между старым и новым мастер-процессом. Полный даунтайм возникает только при ошибке в конфигурации, поэтому ключевой этап - проверка синтаксиса до перезапуска.

# Шаг 1: Обновление индекса пакетов
sudo apt update

# Шаг 2: Просмотр доступных версий
apt-cache policy nginx
# Ожидаемый вывод:
# nginx:
#   Installed: 1.24.0-...
#   Candidate: 1.26.2-1~jammy  (или 1.26.2-1~noble для 24.04)
#   Version table:
#      1.26.2-1~jammy 900
#         900 http://nginx.org/packages/mainline/ubuntu jammy/nginx amd64 Packages

# Шаг 3: Установка обновления
sudo apt install -y nginx
# В процессе установки пакетный менеджер задаст вопрос о перезаписи конфигурационных файлов.
# Всегда выбирайте "N" (keep your currently-installed version) - ваши конфиги останутся нетронутыми.

Обновление пакетов и проверка конфигурации перед перезапуском

Пакет установлен, но старый процесс Nginx всё ещё работает в памяти. Это штатная ситуация - deb-пакет не перезапускает сервис автоматически, чтобы избежать обрыва соединений. Перед применением новой версии обязательно проверьте синтаксис конфигурации.

# Шаг 4: Проверка синтаксиса конфигурации
sudo nginx -t
# Успешный вывод:
# nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
# nginx: configuration file /etc/nginx/nginx.conf test is successful

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

  • unknown directive "ssl" - модуль ngx_http_ssl_module не загружен. Проверьте, что пакет nginx-module-ssl установлен.
  • directive "proxy_ssl_session_reuse" is obsolete - директива удалена в 1.26. Удалите строку из конфигурации.
  • cannot load module - сторонний модуль несовместим. Временно закомментируйте load_module и вернитесь к этому после обновления.

При любой ошибке синтаксиса не применяйте изменения. Восстановите конфигурацию из бэкапа и повторите проверку:

sudo cp -a /backup/nginx_backup_YYYYMMDD_HHMMSS/etc/nginx/* /etc/nginx/
sudo nginx -t

Плавный перезапуск Nginx для сохранения активных соединений

Nginx поддерживает бесшовное обновление исполняемого файла без разрыва установленных соединений. Механизм работает так: старый мастер-процесс продолжает обслуживать активные запросы, одновременно запускается новый мастер с обновлённым бинарником. Новые соединения принимает уже обновлённый процесс.

# Шаг 5: Плавный перезапуск (graceful reload)
sudo nginx -s reload
# Альтернативная команда через systemd:
sudo systemctl reload nginx

# Шаг 6: Проверка, что запущена новая версия
nginx -v
# Ожидаемый вывод:
# nginx version: nginx/1.26.2

Разница между reload и restart принципиальна. systemctl reload nginx отправляет мастер-процессу сигнал SIGHUP, что заставляет его перечитать конфигурацию и запустить новые рабочие процессы. Старые процессы завершаются только после обработки всех активных соединений. systemctl restart nginx принудительно убивает все процессы и запускает новые - это гарантированный простой на 2-5 секунд.

Проверьте, что старые рабочие процессы завершились корректно:

ps aux | grep nginx
# Должны быть видны только процессы новой версии.
# Если висят старые процессы с пометкой "worker process is shutting down",
# подождите до 60 секунд - это нормальное поведение при длинных keep-alive соединениях.

Подробный разбор механизма graceful shutdown и интеграция reload в CI/CD пайплайны - в руководстве «Безопасное обновление конфигурации Nginx: полное руководство по nginx -s reload».

Проверка работоспособности и решение типичных проблем после обновления

Обновление завершено, сервер отвечает на запросы. Но внешняя доступность сайта не гарантирует корректной работы всех функций. Пройдите этот чек-лист, чтобы исключить скрытые проблемы.

Чек-лист валидации после обновления:

  1. Статус сервиса: systemctl status nginx - должен быть active (running), без сообщений об ошибках в последних строках вывода.
  2. Доступность по HTTP и HTTPS: curl -I -k https://localhost - проверяет ответ на локальном интерфейсе, исключая проблемы сети и DNS.
  3. Корректность HTTP-заголовков: curl -I https://your-domain.com 2>&1 | grep -E '(Server:|HTTP/)' - убедитесь, что заголовок Server содержит новую версию.
  4. Логи ошибок: tail -50 /var/log/nginx/error.log - ищите записи уровня emerg, alert, crit. Предупреждения (warn) о устаревших директивах допустимы, но требуют внимания.
  5. Работа SSL/TLS: openssl s_client -connect your-domain.com:443 -tls1_3 - подтверждает, что TLS 1.3 функционирует после обновления.

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

Ошибка загрузки модуля: unknown directive "brotli" или module is not binary compatible. Установите модуль из того же репозитория, откуда пришёл Nginx:

sudo apt install nginx-module-brotli nginx-module-geoip2 nginx-module-image-filter

Изменение поведения директив: в Nginx 1.26 изменился дефолтный размер буфера для proxy_busy_buffers_size. Если ваш upstream возвращает большие заголовки, клиенты могут получать 502 ошибку. Добавьте в конфигурацию явное указание размера:

proxy_busy_buffers_size 16k;
proxy_buffer_size 8k;

Конфликт портов: если после обновления Nginx не может занять порт 80 или 443, проверьте, не запущен ли старый процесс:

sudo ss -tlnp | grep -E ':(80|443)'
sudo kill -QUIT $(cat /var/run/nginx.pid)  # Корректное завершение старого мастера

План отката: как вернуться к предыдущей версии Nginx

Откат требуется в двух случаях: критическая ошибка, нарушающая работу продакшена, или несовместимость конфигурации, которую нельзя исправить за 5-10 минут. Процедура занимает не более 2 минут и возвращает сервер в состояние до обновления.

Сценарий 1: предыдущий пакет остался в кэше apt. Пакетный менеджер Ubuntu хранит последние версии установленных пакетов в /var/cache/apt/archives/. Если вы не чистили кэш командой apt clean, старый .deb-файл доступен.

# Поиск старого пакета в кэше
ls -la /var/cache/apt/archives/ | grep nginx

# Откат к конкретной версии
sudo apt install nginx=1.24.0-2~jammy \
  nginx-module-geoip2=1.24.0-2~jammy \
  nginx-module-image-filter=1.24.0-2~jammy

# Проверка версии после отката
nginx -v
sudo nginx -t && sudo systemctl reload nginx

Сценарий 2: восстановление из резервной копии конфигурации и переустановка пакета. Если кэш apt очищен или пакет нужной версии недоступен, используйте бэкап и временно переключитесь на стандартный репозиторий Ubuntu.

# 1. Удаление текущей версии
sudo apt remove --purge nginx nginx-module-*

# 2. Временное отключение официального репозитория
sudo mv /etc/apt/sources.list.d/nginx.list /etc/apt/sources.list.d/nginx.list.disabled
sudo apt update

# 3. Установка версии из репозиториев Ubuntu
sudo apt install nginx

# 4. Восстановление конфигурации из бэкапа
sudo cp -a /backup/nginx_backup_YYYYMMDD_HHMMSS/etc/nginx/* /etc/nginx/

# 5. Проверка и запуск
sudo nginx -t && sudo systemctl start nginx

Блокировка версии до выяснения причин сбоя. После успешного отката зафиксируйте пакет, чтобы плановое обновление системы не установило проблемную версию повторно:

sudo apt-mark hold nginx nginx-module-*

Когда причина сбоя будет найдена и устранена, снимите блокировку:

sudo apt-mark unhold nginx nginx-module-*

Если вы используете самосборную версию Nginx с кастомным набором модулей, процедура отката сложнее - потребуется пересборка из исходников. Алгоритм действий описан в руководстве «Сборка Nginx с дополнительными модулями».

Поделиться:
Сохранить гайд? В закладки браузера