Nginx — это высокопроизводительный веб-сервер, reverse-прокси, почтовый прокси-сервер и балансировщик нагрузки. Он известен своей асинхронной архитектурой, низким потреблением памяти и способностью обслуживать десятки тысяч соединений одновременно. Debian по умолчанию поставляет свою версию Nginx из официальных репозиториев, но она может быть старой: Debian 11 — 1.18, Debian 12 — 1.22, Debian 13 — 1.26. Если вам нужны новые функции (HTTP/3, современный TLS, новые возможности reverse-прокси), лучше установить Mainline-версию из официального репозитория nginx.org. Главные сложности для новичка: нужно выбрать правильный пакет (nginx, nginx-full, nginx-extras и т.д.), настроить фаервол (UFW), а если вы ставите Mainline — добавить репозиторий, GPG-ключ и APT pinning.
💡 В этом руководстве вы установите Nginx на Debian двумя способами: стандартную версию из репозиториев Debian (для большинства пользователей) и Mainline-версию из официального репозитория nginx.org (если нужны новые функции). Вы также узнаете, как настроить фаервол, создать виртуальный хост (server block), управлять сервисом и решать типичные проблемы.
В этой статье вы узнаете:
- Как установить Nginx из стандартных репозиториев Debian
- Как выбрать подходящий пакет (nginx, nginx-full, nginx-extras и др.)
- Как настроить UFW для доступа к веб-серверу
- Как создать и активировать виртуальный хост (server block)
- Как установить Nginx Mainline из официального репозитория nginx.org
- Как управлять сервисом (запуск, перезагрузка, статус)
- Как решить типичные проблемы: порт занят, ошибка конфигурации, 403 Forbidden
Для кого: веб-разработчики, системные администраторы, а также все, кто хочет поднять веб-сервер на Debian 11, 12 или 13.
1. 🔧 Предварительные требования
Перед установкой убедитесь, что:
- У вас установлена Debian 11, 12 или 13
- Подключение к интернету стабильно
- Порт 80 (HTTP) и 443 (HTTPS) свободны (если вы планируете использовать веб-сервер)
⚠️ ВАЖНО: Проверьте права sudo перед установкой
Если вы не уверены, есть ли у вашего пользователя права администратора, выполните в терминале:
sudo whoami
Что делает: sudo выполняет команду от имени суперпользователя, whoami показывает имя текущего пользователя.
Зачем: Эта команда проверяет, есть ли у вас права sudo. Без них вы не сможете устанавливать пакеты.
✅ Если выводит root — всё в порядке, можете продолжать.
❌ Если выводит is not in the sudoers file — сначала пройдите наше руководство по настройке sudo.
1.1 Обновление системы
Перед установкой всегда обновляйте список пакетов.
sudo apt update && sudo apt upgrade -y
Что делает:
sudo— права суперпользователяapt update— обновляет список доступных пакетов из репозиториев&&— выполняет следующую команду только если предыдущая успешнаapt upgrade -y— обновляет все установленные пакеты до последних версий
Зачем: Это стандартная практика безопасности перед установкой нового ПО.
2. 📊 Выбор пакета Nginx в Debian
Debian разделяет Nginx на один базовый пакет и несколько наборов модулей. Вот их сравнение:
| Пакет | Что добавляет Debian | Для кого |
|---|---|---|
nginx | Базовый веб-сервер + nginx-common | Большинство reverse-прокси, статических сайтов и PHP-стеков |
nginx-light | Базовый сервер + модуль Echo | Минимальные установки, которым всё ещё нужен Echo |
nginx-core | Базовый сервер + GeoIP, image filter, XSLT, mail, stream | Серверы, которым нужны стандартные динамические модули Debian |
nginx-full | Базовый сервер + auth PAM, DAV, GeoIP2, Echo, subs-filter, upstream-fair | Более широкий охват функций без самых больших наборов |
nginx-extras | Базовый сервер + Lua, cache purge, headers-more, nchan | Продвинутые настройки, которым нужны дополнительные динамические модули |
Какие версии Nginx в разных Debian (из стандартных репозиториев):
| Версия Debian | Версия Nginx |
|---|---|
| Debian 13 (Trixie) | 1.26.x |
| Debian 12 (Bookworm) | 1.22.x |
| Debian 11 (Bullseye) | 1.18.x |
💡 Рекомендация: Для большинства пользователей подойдёт nginx (базовый пакет). nginx-extras выбирайте, только если точно знаете, что вам нужны модули Lua, cache purge и т.д. Если вам нужны самые свежие функции (HTTP/3, современный TLS), используйте Mainline-версию из официального репозитория nginx.org (см. раздел 5).
3. 📦 Установка Nginx из стандартных репозиториев Debian
Этот способ подходит для большинства пользователей. Вы получаете версию Nginx, протестированную для вашего выпуска Debian.
3.1 Установка пакета
Для базовой установки:
sudo apt install nginx -y
Что делает: Устанавливает базовый пакет Nginx из официальных репозиториев Debian.
Если вы выбрали другой пакет (например, nginx-full), замените nginx на нужный:
sudo apt install nginx-full -y
3.2 Проверка установки
sudo nginx -v
Что делает: Показывает установленную версию Nginx. sudo нужен, потому что бинарный файл находится в /usr/sbin/nginx, который не всегда в PATH обычного пользователя.
✅ Ожидаемый вывод в терминале (Debian 13):
nginx version: nginx/1.26.3
(В Debian 12 будет 1.22.x, в Debian 11 — 1.18.x.)
3.3 Проверка статуса сервиса
systemctl status nginx --no-pager
✅ Ожидаемый вывод в терминале (сокращённо):
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running)
4. 🔥 Настройка UFW (фаервол) для Nginx
UFW — это стандартный инструмент для управления фаерволом в Debian. Если вы настраиваете сервер удалённо (по SSH), сначала разрешите SSH, иначе потеряете доступ.
4.1 Установка UFW (если не установлен)
sudo apt install ufw -y
4.2 Разрешить SSH (важно для удалённых серверов!)
sudo ufw allow ssh
4.3 Просмотр доступных профилей Nginx
sudo ufw app list | grep Nginx
✅ Ожидаемый вывод:
Nginx Full
Nginx HTTP
Nginx HTTPS
Nginx HTTP— только порт 80Nginx HTTPS— только порт 443Nginx Full— оба порта (80 и 443)
4.4 Разрешить Nginx и включить UFW
Для обычного веб-сервера (порты 80 и 443):
sudo ufw allow 'Nginx Full'
Для HTTP только (порт 80):
sudo ufw allow 'Nginx HTTP'
Включение UFW:
sudo ufw enable
4.5 Проверка правил
sudo ufw status numbered
✅ Ожидаемый вывод:
Status: active
To Action From
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] Nginx Full ALLOW IN Anywhere
[ 3] 22/tcp (v6) ALLOW IN Anywhere (v6)
[ 4] Nginx Full (v6) ALLOW IN Anywhere (v6)
4.6 Проверка приветственной страницы
Откройте в браузере http://IP-вашего-сервера или выполните:
curl -I http://127.0.0.1
✅ Ожидаемый вывод:
HTTP/1.1 200 OK
Server: nginx/1.26.3
5. 🚀 (Опционально) Установка Nginx Mainline из официального репозитория nginx.org
Если вам нужны самые свежие функции (HTTP/3, современный TLS), установите Mainline-версию. Полная инструкция с подробными пояснениями уже есть на нашем сайте:
👉 Установка Nginx Mainline на Debian 13, 12, 11: подробное руководство
Кратко: нужно добавить репозиторий nginx.org, импортировать GPG-ключ, настроить APT pinning (приоритет 900), затем установить nginx. Все шаги с пояснениями есть в указанной статье.
6. 📝 Создание виртуального хоста (server block)
Виртуальные хосты позволяют обслуживать несколько доменов на одном сервере.
6.1 Создание корневой директории сайта
sudo install -d -o www-data -g www-data /var/www/example.com
Что делает: Создаёт директорию /var/www/example.com и назначает владельцем пользователя www-data (от которого работает Nginx).
6.2 Создание тестовой страницы
printf '%s\n' \
'<html>' \
' <head><title>Welcome to Example.com</title></head>' \
' <body><h1>Success! The Nginx server block is working!</h1></body>' \
'</html>' | sudo tee /var/www/example.com/index.html > /dev/null
6.3 Создание конфигурации виртуального хоста
printf '%s\n' \
'server {' \
' listen 80;' \
' listen [::]:80;' \
' server_name example.com www.example.com;' \
' root /var/www/example.com;' \
' index index.html;' \
' location / {' \
' try_files $uri $uri/ =404;' \
' }' \
'}' | sudo tee /etc/nginx/sites-available/example.com.conf > /dev/null
Что делает: Создаёт конфигурацию сайта в директории sites-available.
6.4 Активация виртуального хоста
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
Что делает: Создаёт символическую ссылку в sites-enabled, чтобы Nginx «увидел» конфигурацию.
6.5 (Опционально) Отключение стандартного сайта по умолчанию
sudo rm /etc/nginx/sites-enabled/default
6.6 Проверка конфигурации и перезагрузка
sudo nginx -t
✅ Ожидаемый вывод:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
sudo systemctl reload nginx
6.7 Проверка
curl -H 'Host: example.com' http://127.0.0.1/
✅ Ожидаемый вывод: HTML-страница с текстом «Success! The Nginx server block is working!»
7. 🛠️ Управление Nginx
| Команда | Что делает |
|---|---|
sudo systemctl reload nginx | Перезагружает конфигурацию без потери соединений (после изменения конфигов) |
sudo systemctl restart nginx | Полностью перезапускает сервер (после обновления бинарного файла) |
sudo systemctl start nginx | Запускает сервер |
sudo systemctl stop nginx | Останавливает сервер |
systemctl status nginx | Показывает статус сервера |
sudo nginx -t | Проверяет конфигурацию на синтаксические ошибки |
sudo tail -f /var/log/nginx/error.log | Просмотр логов ошибок в реальном времени |
8. ⚠️ Решение типичных проблем
8.1 Ошибка: nginx: command not found
Симптом: nginx -v выдаёт bash: nginx: command not found.
Причина: Бинарный файл Nginx находится в /usr/sbin/nginx, который не всегда в PATH обычного пользователя.
Решение: Используйте sudo nginx -v или полный путь /usr/sbin/nginx -v.
8.2 Ошибка: bind() to 0.0.0.0:80 failed (98: Address already in use)
Симптом: Nginx не может запуститься, в логах ошибка bind() to 0.0.0.0:80 failed (98: Address already in use).
Причина: Другой веб-сервер (Apache, другой Nginx) уже слушает порт 80.
Пошаговое решение:
Шаг 1: Узнайте, какой процесс занимает порт 80:
sudo ss -tlnp | grep ':80'
Шаг 2: Остановите конфликтующий сервис (например, Apache):
sudo systemctl stop apache2
sudo systemctl disable apache2
Шаг 3: Запустите Nginx:
sudo systemctl start nginx
8.3 Ошибка 403 Forbidden на приветственной странице
Симптом: curl -I http://127.0.0.1 возвращает 403 Forbidden.
Причина: Проблемы с правами доступа к директории /usr/share/nginx/html/.
Решение: Исправьте права:
sudo chown -R root:root /usr/share/nginx/html/
sudo find /usr/share/nginx/html/ -type d -exec chmod 755 {} \;
sudo find /usr/share/nginx/html/ -type f -exec chmod 644 {} \;
sudo systemctl reload nginx
8.4 APT не видит Mainline-версию (Candidate из Debian)
Симптом: apt-cache policy nginx показывает Candidate из Debian, а не из nginx.org.
Причина: APT pinning не настроен.
Решение: Проверьте наличие файла /etc/apt/preferences.d/99nginx и его содержимое:
cat /etc/apt/preferences.d/99nginx
Должно быть:
Package: *
Pin: release o=nginx
Pin-Priority: 900
Если файла нет — создайте. Полная инструкция в статье про Nginx Mainline.
9. ❌ Удаление Nginx
Удаление стандартной версии (из Debian)
sudo systemctl stop nginx
sudo apt remove --purge nginx nginx-common -y
sudo apt autoremove -y
Удаление Mainline-версии
Полная инструкция — в статье про Nginx Mainline. Кратко:
sudo systemctl stop nginx
sudo apt remove --purge nginx nginx-common -y
sudo apt autoremove -y
sudo rm -f /etc/apt/sources.list.d/nginx.sources
sudo rm -f /etc/apt/preferences.d/99nginx
sudo rm -f /usr/share/keyrings/nginx-archive-keyring.gpg
sudo apt update
Проверка удаления
command -v nginx
✅ Ожидаемый вывод: Пустая строка (если Nginx больше не установлен).
10. 📝 Чек-лист: всё готово к работе
- [ ] Система обновлена (
sudo apt update && sudo apt upgrade -y) - [ ] Выбран и установлен подходящий пакет Nginx (
nginx,nginx-fullи т.д.) - [ ] UFW настроен и разрешает
Nginx Full(илиNginx HTTP) - [ ]
systemctl status nginxпоказываетactive (running) - [ ] Приветственная страница открывается (
curl -I http://127.0.0.1возвращает200 OK) - [ ] Создан и активирован виртуальный хост
Заключение
Вы установили Nginx на Debian. Если вы выбрали стандартную версию из репозиториев Debian — получили стабильную, проверенную версию, которая будет обновляться вместе с системой. Если выбрали Mainline-версию из официального репозитория nginx.org — получили самые свежие функции (HTTP/3, современный TLS). Теперь вы можете настраивать виртуальные хосты, reverse-прокси, SSL-сертификаты и многое другое.
Что дальше:
- Настройте SSL-сертификаты Let’s Encrypt для HTTPS
- Создайте виртуальные хосты для нескольких доменов
- Настройте reverse-прокси для ваших приложений (Node.js, Python, Go)
- Включите gzip-сжатие для ускорения загрузки страниц
- Защитите сервер с помощью Fail2Ban