Установка Nginx на Debian 12 и Ubuntu 24.04 из официального репозитория
Установка 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.
Готовы попробовать?
Размещайте веб-приложения на надежном VPS. →