Установка Nginx Mainline на Debian 13, 12, 11: подробное руководство

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

В официальных репозиториях Debian доступна стабильная версия Nginx, которая получает только обновления безопасности. Однако если вам нужны новые функции, свежие модули или исправления ошибок, которые ещё не попали в стабильную ветку, стоит установить Mainline-версию из официального репозитория nginx.org.

В этой статье мы подробно разберём, как установить Nginx Mainline на Debian 13 (Trixie), 12 (Bookworm) и 11 (Bullseye). Мы рассмотрим добавление официального репозитория nginx.org, установку, настройку APT-приоритетов (pinning), базовое конфигурирование, а также типичные проблемы и способы их решения.

1. Предварительные требования

Перед началом установки убедитесь, что ваша система готова.

  • Установленная операционная система Debian 11, 12 или 13.
  • Подключение к интернету.
  • Пользователь с правами sudo или доступ к root-пользователю.
  • Базовое понимание, как работают пакетные менеджеры в Debian.

⚠️ ВАЖНО: Проверьте права sudo перед установкой

Если вы не уверены, есть ли у вашего пользователя права администратора, выполните в терминале:

sudo -l

Ожидаемый вывод: список разрешённых команд. Если видите (ALL : ALL) ALL или другие записи, означающие полный доступ — у вас есть права sudo.

Если выводит is not in the sudoers file — значит, прав нет. Сначала пройдите наше руководство по настройке sudo.

2. Обновление системы

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

Выполните в терминале:

sudo apt update

Что делает: Обновляет список доступных пакетов из всех подключённых репозиториев.
Зачем: Чтобы система знала о свежих версиях пакетов и зависимостях.

Теперь обновите установленные пакеты:

sudo apt upgrade

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

💡 Если вы уверены в своих действиях и хотите автоматически подтверждать все запросы, можно добавить флаг -y: sudo apt upgrade -y. В обучающей инструкции мы рекомендуем сначала посмотреть, что будет обновлено, и подтвердить вручную.

3. Установка Nginx из репозитория nginx.org

Мы будем устанавливать Nginx из официального репозитория разработчиков. Это даст нам самую свежую Mainline-версию.

3.1 Установка вспомогательных пакетов

Для добавления репозитория нам понадобятся утилиты curl, gnupg и lsb-release. В минимальной установке Debian их может не быть.

Выполните в терминале:

sudo apt install curl gnupg lsb-release

Что делает: Устанавливает пакеты curl, gnupg и lsb-release.
Зачем: curl нужен для скачивания ключа, gnupg — для проверки подлинности, а lsb-release — для автоматического определения версии Debian.

💡 Если вы уверены в своих действиях и хотите автоматически подтверждать все запросы, можно добавить флаг -y: sudo apt install curl gnupg lsb-release -y. В обучающей инструкции мы рекомендуем сначала посмотреть, что будет установлено, и подтвердить вручную.

3.2 Импорт официального GPG-ключа

Nginx подписывает свои пакеты GPG-ключом, чтобы система могла проверить их подлинность. Нам нужно скачать и установить этот ключ.

⚠️ Важно: скачивание и сохранение ключа выполняется с правами суперпользователя (sudo), чтобы файл попал в защищённую системную директорию /usr/share/keyrings/.

Выполните в терминале:

sudo curl -fsSL https://nginx.org/keys/nginx_signing.key -o /usr/share/keyrings/nginx-archive-keyring.gpg

Что делает: Скачивает официальный GPG-ключ Nginx и сохраняет его в системную директорию ключей.
Зачем: Без этого ключа APT не сможет проверить пакеты из репозитория nginx.org, и установка будет заблокирована.

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

ls -lh /usr/share/keyrings/nginx-archive-keyring.gpg

Если видите строку с размером (например, 1.2K), ключ загружен.

💡 Для детальной проверки содержимого ключа можно использовать команду:

gpg -k --no-default-keyring --keyring /usr/share/keyrings/nginx-archive-keyring.gpg

3.3 Добавление репозитория nginx.org

Теперь создадим файл репозитория в современном формате .sources.

Выполните в терминале:

CODENAME=$(lsb_release -cs)

sudo tee /etc/apt/sources.list.d/nginx.sources > /dev/null <<EOF
Types: deb
URIs: https://nginx.org/packages/mainline/debian
Suites: ${CODENAME}
Components: nginx
Signed-By: /usr/share/keyrings/nginx-archive-keyring.gpg
EOF

Что делает: Создаёт файл конфигурации репозитория nginx.org.
Зачем: APT узнаёт, где искать пакеты Nginx. Переменная ${CODENAME} автоматически подставит кодовое имя вашей версии Debian (например, bookworm для 12).

3.4 Настройка APT-приоритетов (pinning)

Чтобы система использовала Nginx именно из репозитория nginx.org, а не из стандартного репозитория Debian, нужно настроить приоритеты APT. Дадим репозиторию nginx.org более высокий приоритет (900), чем у стандартного репозитория Debian (обычно 500).

Выполните в терминале:

sudo tee /etc/apt/preferences.d/99nginx > /dev/null <<EOF
Package: nginx
Pin: release o=nginx
Pin-Priority: 900
EOF

Что делает: Создаёт файл с настройками приоритетов для репозитория nginx.org.
Зачем: Без этого APT может установить старую версию Nginx из репозитория Debian.

⚠️ Важно: правило Package: nginx применяется только к пакетам с именем nginx. Если в будущем из репозитория nginx.org понадобятся другие пакеты (например, nginx-module-*), для них нужно будет создать отдельное правило или использовать Package: *.

💡 Альтернативный вариант: если вы планируете устанавливать все пакеты из репозитория nginx.org, можно использовать Package: *:

Package: *
Pin: release o=nginx
Pin-Priority: 900

3.5 Проверка добавления репозитория

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

Сначала обновите список пакетов:

sudo apt update

Теперь проверим, что APT видит репозиторий nginx.org:

grep -h '^Origin:' /var/lib/apt/lists/*nginx*_InRelease

Ожидаемый вывод: строка Origin: nginx.

Что делает: Показывает Origin (источник) всех скачанных метаданных, в имени которых есть nginx.
Зачем: Подтверждает, что репозиторий nginx.org успешно подключён и APT получил от него информацию.

3.6 Установка Nginx

Теперь можно установить Nginx Mainline.

Выполните в терминале:

sudo apt install nginx

Что делает: Устанавливает пакет nginx из репозитория nginx.org.
Зачем: Это основной пакет с самим веб-сервером.

💡 Если вы уверены в своих действиях и хотите автоматически подтверждать все запросы, можно добавить флаг -y: sudo apt install nginx -y.

3.7 Проверка версии

Убедимся, что установилась именно Mainline-версия.

Выполните в терминале:

sudo nginx -v

Ожидаемый вывод: Версия Nginx, например nginx version: nginx/1.27.0, где 1.27.x — это Mainline-ветка.

💡 Отличие Mainline от Stable:

  • Mainline — содержит новые функции и исправления, обновляется часто.
  • Stable — получает только исправления безопасности, более консервативна.

Если вы хотите установить не Mainline, а стабильную версию, замените mainline на stable в команде добавления репозитория.

4. Базовое управление Nginx

После установки Nginx автоматически запускается и добавляется в автозагрузку. Вот основные команды для управления сервисом.

4.1 Проверка статуса

Выполните в терминале:

systemctl status nginx --no-pager

Что делает: Показывает текущий статус сервиса Nginx.
Ожидаемый вывод: Active: active (running).

4.2 Остановка, запуск и перезапуск

sudo systemctl stop nginx   # Остановка
sudo systemctl start nginx  # Запуск
sudo systemctl restart nginx # Перезапуск
sudo systemctl reload nginx  # Перезагрузка конфигурации без остановки

Что делает: Управляет состоянием сервиса.
Зачем: После изменения конфигурации нужно перезагрузить Nginx, чтобы изменения вступили в силу.

4.3 Автозагрузка

sudo systemctl enable nginx   # Включить автозапуск
sudo systemctl disable nginx  # Отключить автозапуск

Что делает: Управляет автозагрузкой сервиса при старте системы.

5. Проверка работоспособности

Сразу после установки Nginx по умолчанию открывает приветственную страницу.

5.1 Проверка через curl

Выполните в терминале:

curl -I http://127.0.0.1

Что делает: Отправляет HTTP-запрос к локальному серверу и показывает только заголовки.
Ожидаемый вывод: HTTP/1.1 200 OK.

5.2 Проверка через браузер

Откройте браузер и перейдите по адресу http://[IP-адрес-вашего-сервера]. Вы должны увидеть приветственную страницу Nginx.

6. Структура конфигурации Nginx из nginx.org

Конфигурация Nginx из репозитория nginx.org немного отличается от структуры пакета из Debian.

Основные файлы и директории:

  • /etc/nginx/nginx.conf — главный конфигурационный файл.
  • /etc/nginx/conf.d/ — директория для дополнительных конфигураций. Все файлы с расширением .conf из этой папки подключаются автоматически.
  • /etc/nginx/sites-enabled/ и /etc/nginx/sites-available/отсутствуют в пакете nginx.org.

💡 Совет: если вам привычна структура sites-available и sites-enabled, вы можете создать эти папки вручную и подключать конфиги через include в nginx.conf. Nginx из nginx.org это полностью поддерживает.

Чтобы добавить свой сайт, создайте файл конфигурации в /etc/nginx/conf.d/:

sudo tee /etc/nginx/conf.d/mysite.conf > /dev/null <<'EOF'
server {
    listen 80;
    server_name mysite.local;

    root /var/www/mysite;
    index index.html;
}
EOF

Что делает: Создаёт простой конфигурационный блок для сайта.
Зачем: Определяет, как Nginx должен обрабатывать запросы к домену mysite.local.

⚠️ Перед использованием этого конфига убедитесь, что директория /var/www/mysite существует и имеет правильные права. Иначе Nginx вернёт ошибку 403:

sudo mkdir -p /var/www/mysite
sudo chown -R www-data:www-data /var/www/mysite

💡 Важно: в папке /var/www/mysite должен существовать файл index.html, иначе Nginx вернёт ошибку 403 или 404. Простой тестовый файл можно создать так:

echo "<h1>Hello from Nginx</h1>" | sudo tee /var/www/mysite/index.html

После изменения конфигурации проверьте её и перезагрузите Nginx:

sudo nginx -t    # Проверка конфигурации
sudo systemctl reload nginx  # Перезагрузка без остановки

7. Удаление Nginx

Если Nginx больше не нужен, его можно удалить.

7.1 Удаление с сохранением конфигурации

sudo apt remove nginx nginx-common

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

7.2 Полное удаление с очисткой конфигурации

sudo apt remove --purge nginx nginx-common

Что делает: Удаляет пакеты и безвозвратно удаляет все конфигурационные файлы Nginx (включая ваши настройки сайтов).

⚠️ Важно: флаг --purge безвозвратно удалит все конфигурационные файлы Nginx. Если вы хотите сохранить свои конфиги, скопируйте их заранее:

mkdir ~/nginx-backup
cp -r /etc/nginx ~/nginx-backup/

7.3 Удаление репозитория

Если вы больше не планируете использовать nginx.org, удалите файл репозитория:

sudo rm /etc/apt/sources.list.d/nginx.sources
sudo apt update

8. Решение типичных проблем

В этом разделе мы разберем ошибки, с которыми чаще всего сталкиваются новички.

8.1 Ошибка: «nginx: command not found»

Симптом: После установки команда nginx -v не найдена.

Возможные причины: Пакет не установлен из-за проблем с репозиторием или ключом.

Что можно проверить:

Шаг 1: Убедитесь, что пакет установлен:

dpkg -l | grep nginx

Ожидаемый вывод: Должна быть строка с ii в начале, означающая успешную установку.

Шаг 2: Проверьте, что репозиторий nginx.org добавлен:

cat /etc/apt/sources.list.d/nginx.sources

Шаг 3: Проверьте, что GPG-ключ скачан:

ls -lh /usr/share/keyrings/nginx-archive-keyring.gpg

8.2 Ошибка: «The following signatures couldn’t be verified»

Симптом: При sudo apt update появляется ошибка о непроверенных подписях.

Возможная причина: Неправильно скачан или повреждён GPG-ключ.

Что можно проверить:

Шаг 1: Переустановите ключ:

sudo rm /usr/share/keyrings/nginx-archive-keyring.gpg
sudo curl -fsSL https://nginx.org/keys/nginx_signing.key -o /usr/share/keyrings/nginx-archive-keyring.gpg

Шаг 2: Проверьте, что ключ корректно загружен:

file /usr/share/keyrings/nginx-archive-keyring.gpg

Ожидаемый вывод: PGP public key block или OpenPGP Public Key.

Шаг 3: Обновите список пакетов:

sudo apt update

8.3 Ошибка: порт 80 уже занят

Симптом: Nginx не может запуститься, а в логах есть строка:

bind() to 0.0.0.0:80 failed (98: Address already in use)

Возможная причина: Другой веб-сервер (например, Apache) уже слушает порт 80.

Что можно проверить:

Шаг 1: Узнайте, какой процесс занимает порт 80:

sudo ss -ltnp | grep ':80 '

Пример вывода:

LISTEN 0      5            0.0.0.0:80        0.0.0.0:*    users:(("apache2",pid=1234,fd=3))

В этом примере порт 80 занят процессом apache2.

Шаг 2: Остановите другой сервер или измените порт в конфигурации Nginx:

sudo systemctl stop apache2
sudo systemctl disable apache2  # Отключить автозапуск

8.4 Ошибка 403 Forbidden

Симптом: При попытке открыть страницу возвращается 403 Forbidden.

Возможная причина: Проблемы с правами доступа к директории сайта.

Что можно проверить:

Шаг 1: Проверьте права на директорию:

ls -la /var/www/mysite

Шаг 2: Убедитесь, что пользователь, от которого работает Nginx (обычно www-data), имеет права на чтение:

# Устанавливаем владельца
sudo chown -R www-data:www-data /var/www/mysite

# Права на директории: 755
sudo find /var/www/mysite -type d -exec chmod 755 {} \;

# Права на файлы: 644
sudo find /var/www/mysite -type f -exec chmod 644 {} \;

Шаг 3: Перезагрузите Nginx:

sudo systemctl reload nginx

8.5 Ошибка 502 Bad Gateway

Симптом: При попытке открыть страницу возвращается 502 Bad Gateway.

Возможная причина: Nginx не может связаться с бэкенд-приложением (например, PHP-FPM или Python/Node.js).

Что можно проверить:

Шаг 1: Проверьте логи Nginx:

sudo tail -f /var/log/nginx/error.log

Шаг 2: Убедитесь, что бэкенд-сервис запущен. Например, для PHP-FPM:

systemctl status php8.2-fpm

Шаг 3: Проверьте, что бэкенд слушает правильный порт или сокет и что Nginx использует правильные настройки.

⚠️ Примечание: Название сервиса зависит от версии PHP. Если не уверены, найдите активный сервис командой.

systemctl list-unit-files | grep php.*fpm

9. Чек-лист для проверки установки

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

  • [ ] Репозиторий nginx.org добавлен: cat /etc/apt/sources.list.d/nginx.sources показывает URL nginx.org
  • [ ] APT pinning настроен: cat /etc/apt/preferences.d/99nginx содержит Pin-Priority: 900
  • [ ] APT выбирает nginx.org: apt-cache policy nginx показывает Candidate из nginx.org (например, 1.27.x-1~bookworm) с приоритетом 900; эта строка должна быть выше строки с версией из Debian
  • [ ] Nginx установлен: sudo nginx -v показывает версию Mainline
  • [ ] Сервис активен: systemctl status nginx --no-pager показывает Active: active (running)
  • [ ] Приветственная страница доступна: curl -I http://127.0.0.1 возвращает HTTP/1.1 200 OK
  • [ ] APT выбирает nginx.org: в выводе apt-cache policy nginx Candidate — это nginx/1.27.x-1~bookworm с приоритетом 900, и эта строка находится выше строки с версией из репозитория Debian.

10. Заключение

Мы успешно установили Nginx Mainline на Debian из официального репозитория nginx.org. Вы узнали, как добавить репозиторий, настроить APT-приоритеты, управлять сервисом и решать типичные проблемы.

Теперь у вас есть свежий веб-сервер с последними функциями и исправлениями. В следующих статьях мы разберём настройку виртуальных хостов, настройку HTTPS через Let’s Encrypt и интеграцию с PHP-FPM.

Что дальше:

  • Настройте виртуальные хосты (server blocks) в /etc/nginx/conf.d/
  • Настройте SSL-сертификаты Let’s Encrypt
  • Настройте reverse-proxy для ваших приложений
  • Включите gzip-сжатие для ускорения загрузки страниц
  • Защитите сервер с помощью Fail2Ban