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

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 — только порт 80
  • Nginx HTTPS — только порт 443
  • Nginx 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