Установка Nginx на Debian 12 и Ubuntu 24.04 из официального репозитория

6 мин чтения·Matthieu·nginxdebianubuntuweb-serverfirewall|

Установка Nginx из официального репозитория nginx.org на Debian 12 или Ubuntu 24.04. Ключ подписи, пиннинг apt, правила файрвола UFW и nftables, управление через systemd и проверка включена.

В этом туториале мы ставим Nginx из официального репозитория nginx.org на VPS с Debian 12 или Ubuntu 24.04. Получаешь последнюю версию (1.28.2 stable или 1.29.6 mainline) вместо устаревшего пакета из дистрибутива. Каждый шаг включает проверку, чтобы ты точно знал, что произошло.

О том, какое место Nginx занимает в серверном стеке, читай в Администрирование Nginx на VPS.

Что нужно

  • VPS с Debian 12 (Bookworm) или Ubuntu 24.04 (Noble Numbat)
  • Пользователь с правами sudo (не root)
  • SSH-доступ к серверу

Все команды в этом туториале выполняются от пользователя с sudo. Не от root.

Stable или mainline, что ставить?

Nginx поддерживает две ветки. Stable (четный номер версии, сейчас 1.28.x) получает только критические исправления. Mainline (нечетный номер версии, сейчас 1.29.x) получает все новые фичи, багфиксы и патчи безопасности. Команда Nginx рекомендует mainline для продакшена. Stable, для тех, кому нужен минимум изменений между обновлениями.

Stable Mainline
Текущая версия 1.28.2 1.29.6
Частота обновлений Только критические фиксы Каждые 4-6 недель
Новые фичи Нет Да
Рекомендация nginx.org Для консервативных конфигураций Для продакшена

Этот туториал по умолчанию ставит stable. Чтобы поставить mainline, замени URL репозитория в указанных местах.

Зачем использовать официальный репозиторий вместо пакета дистрибутива?

Стандартные apt-репозитории Debian 12 и Ubuntu 24.04 содержат Nginx 1.22.1 и 1.24.0 соответственно. Эти версии отстают от официальных релизов на месяцы или годы. Репозиторий nginx.org дает последнюю stable- или mainline-сборку, которую поддерживает команда Nginx.

Источник Версия Debian 12 Версия Ubuntu 24.04 Поддерживается
Репозиторий дистрибутива 1.22.1 1.24.0 Мейнтейнеры ОС
nginx.org stable 1.28.2 1.28.2 Команда Nginx
nginx.org mainline 1.29.6 1.29.6 Команда Nginx

Как установить Nginx на Debian 12 из официального репозитория?

Ставим зависимости, добавляем ключ подписи nginx.org, настраиваем источник apt, пинним репозиторий и устанавливаем. Занимает около двух минут.

Шаг 1: Установить зависимости

sudo apt update
sudo apt install -y curl gnupg2 ca-certificates lsb-release debian-archive-keyring

Шаг 2: Импортировать ключ подписи nginx.org

curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Проверяем отпечаток ключа:

gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg

Внимательно смотрим: в выводе перечислены несколько ключей подписи. Ищи среди них этот отпечаток:

573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62

Если ни один из перечисленных отпечатков не совпадает, удали файл и скачай заново. Несовпадение ключа означает, что загрузка была перехвачена или повреждена.

Шаг 3: Добавить репозиторий apt

Для stable:

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
https://nginx.org/packages/debian $(lsb_release -cs) nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Для mainline замени packages на packages/mainline:

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
https://nginx.org/packages/mainline/debian $(lsb_release -cs) nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Шаг 4: Закрепить приоритет официального репозитория

Это гарантирует, что apt предпочтет пакет nginx.org версии из дистрибутива:

echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
    | sudo tee /etc/apt/preferences.d/99nginx

Без пиннинга будущий apt upgrade может заменить официальный пакет старой версией из дистрибутива.

Шаг 5: Установить Nginx

sudo apt update
sudo apt install -y nginx

Шаг 6: Запустить и проверить установку

nginx -v

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

nginx version: nginx/1.28.2

Пакет nginx.org не запускается автоматически после установки. Запускаем вручную:

sudo systemctl start nginx

Проверяем, что сервис работает:

sudo systemctl status nginx

Внимательно смотрим: ищи Active: active (running) в выводе.

Проверяем, что Nginx слушает порт 80:

ss -tlnp | grep :80

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

LISTEN 0      511          0.0.0.0:80        0.0.0.0:*    users:(("nginx",pid=...,fd=...))

Тестируем страницу приветствия:

curl -I http://localhost

Внимательно смотрим: ответ должен содержать HTTP/1.1 200 OK и Server: nginx/1.28.2.

Как установить Nginx на Ubuntu 24.04 из официального репозитория?

Процесс почти идентичен Debian. Отличия только в пакете зависимостей и URL репозитория.

Шаг 1: Установить зависимости

sudo apt update
sudo apt install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring

Примечание: Ubuntu использует ubuntu-keyring вместо debian-archive-keyring.

Шаг 2: Импортировать ключ подписи nginx.org

curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
    | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Проверяем отпечаток (тот же ключ, что и для Debian):

gpg --dry-run --quiet --no-keyring --import --import-options import-show /usr/share/keyrings/nginx-archive-keyring.gpg

Ищи 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62 среди перечисленных ключей.

Шаг 3: Добавить репозиторий apt

Для stable:

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
https://nginx.org/packages/ubuntu $(lsb_release -cs) nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Для mainline:

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
https://nginx.org/packages/mainline/ubuntu $(lsb_release -cs) nginx" \
    | sudo tee /etc/apt/sources.list.d/nginx.list

Шаг 4: Закрепить приоритет официального репозитория

echo -e "Package: *\nPin: origin nginx.org\nPin: release o=nginx\nPin-Priority: 900\n" \
    | sudo tee /etc/apt/preferences.d/99nginx

Шаг 5: Установить Nginx

sudo apt update
sudo apt install -y nginx

Шаг 6: Запустить и проверить установку

Запускаем Nginx (автоматически после установки не стартует):

sudo systemctl start nginx

Выполняем те же проверки, что и для Debian:

nginx -v
sudo systemctl status nginx
ss -tlnp | grep :80
curl -I http://localhost

В nginx -v и заголовках ответа curl должно быть nginx/1.28.2 (stable) или nginx/1.29.6 (mainline).

Как управлять Nginx через systemd?

Nginx поставляется с юнит-файлом systemd. Вот команды, которые пригодятся каждый день.

Команда Что делает
sudo systemctl start nginx Запустить Nginx
sudo systemctl stop nginx Остановить Nginx
sudo systemctl restart nginx Остановить и запустить (обрывает соединения)
sudo systemctl reload nginx Перезагрузить конфиг без обрыва соединений
sudo systemctl enable nginx Запускать при загрузке системы
sudo systemctl disable nginx Не запускать при загрузке системы
sudo systemctl status nginx Показать статус и последние логи

Reload vs restart: Используй reload после изменения конфигурации. Он применяет новый конфиг без обрыва активных соединений. restart нужен только когда менял настройки на уровне бинарника или обновлял Nginx. Reload безопасен. Restart обрывает все активные соединения.

Включаем автозапуск Nginx при загрузке:

sudo systemctl enable 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 -t выдает ошибки, исправь их перед перезагрузкой. Неудачный reload оставляет предыдущий конфиг активным. Неудачный restart оставляет Nginx остановленным.

Как настроить правила файрвола UFW для Nginx?

UFW (Uncomplicated Firewall), стандартный фронтенд файрвола в Ubuntu. В Debian доступен, но не установлен по умолчанию. Некоторые образы VPS поставляются без UFW. Если ufw не найден, сначала ставим его:

sudo apt install -y ufw

Пакет nginx.org не включает профили приложений UFW (Nginx Full, Nginx HTTP, Nginx HTTPS). Эти профили есть только в пакете дистрибутива. Используй номера портов.

Сначала разрешаем SSH (чтобы не заблокировать себе доступ):

sudo ufw allow OpenSSH

Разрешаем HTTP (80) и HTTPS (443):

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Если нужен только HTTPS:

sudo ufw allow 443/tcp

Убедись, что UFW включен:

sudo ufw enable

Проверяем правила:

sudo ufw status

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

80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)

Если ufw status показывает Status: inactive, сначала выполни sudo ufw enable.

Как настроить правила файрвола nftables для Nginx?

Debian 12 использует nftables как бэкенд файрвола по умолчанию. Если управляешь правилами напрямую (без UFW), добавь порты Nginx в конфигурацию nftables.

Редактируем конфигурацию nftables:

sudo nano /etc/nftables.conf

Добавляем эти правила в цепочку input (внутри таблицы inet filter):

tcp dport { 80, 443 } accept

Минимальная рабочая конфигурация:

#!/usr/sbin/nft -f

flush ruleset

table inet filter {
    chain input {
        type filter hook input priority 0; policy drop;

        iif lo accept
        ct state established,related accept
        tcp dport 22 accept
        tcp dport { 80, 443 } accept
    }

    chain forward {
        type filter hook forward priority 0; policy drop;
    }

    chain output {
        type filter hook output priority 0; policy accept;
    }
}

Применяем правила:

sudo nft -f /etc/nftables.conf

Проверяем:

sudo nft list ruleset

Внимательно смотрим: ищи tcp dport { 80, 443 } accept в выводе. Если нет, правила не применились.

Включаем nftables при загрузке:

sudo systemctl enable nftables

Как проверить, что Nginx работает правильно?

После установки и настройки файрвола проходим по чеклисту.

С сервера:

nginx -v
sudo systemctl status nginx
ss -tlnp | grep :80
curl -I http://localhost

С локальной машины (замени YOUR_SERVER_IP на IP сервера):

curl -I http://YOUR_SERVER_IP

Ожидаемые заголовки ответа:

HTTP/1.1 200 OK
Server: nginx/1.28.2

Если внешний curl уходит в таймаут, а localhost работает, файрвол блокирует порт 80. Вернись к разделу UFW или nftables выше.

Можно также открыть http://YOUR_SERVER_IP в браузере. Должна отобразиться страница "Welcome to nginx!".

Расположение основных файлов и каталогов

Путь Назначение
/etc/nginx/nginx.conf Основной файл конфигурации
/etc/nginx/conf.d/ Дополнительные файлы конфигурации (загружаются по умолчанию)
/var/log/nginx/access.log Лог доступа
/var/log/nginx/error.log Лог ошибок
/usr/share/nginx/html/ Корневая директория документов по умолчанию

Официальный пакет nginx.org использует /etc/nginx/conf.d/ для конфигураций сайтов. Это отличается от пакета дистрибутива, который использует sites-available/ и sites-enabled/. Оба подхода работают. Паттерн conf.d проще.

Чтобы разобраться в структуре конфигурационных файлов Nginx, читай Структура конфигурационных файлов Nginx. Чтобы хостить несколько доменов на этом сервере, читай Nginx Server Blocks: несколько доменов на одном VPS.