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 nginxCandidate — это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