Установка и базовая настройка Nginx на Debian 12

Системное администрирование · Debian 12 (Bookworm) · ~7 минут чтения

Nginx — один из самых популярных веб-серверов и обратных прокси. Он лёгкий, хорошо держит большое число параллельных соединений и используется как перед PHP-FPM/Node.js приложениями, так и как раздатчик статики или TLS-терминатор. В этой заметке — минимально достаточная установка Nginx на свежем Debian 12 (Bookworm).

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

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

sudo apt update
sudo apt full-upgrade -y

2. Установка Nginx

Nginx уже есть в основных репозиториях Debian 12, поэтому достаточно одного apt-вызова:

sudo apt install -y nginx

Сразу после установки сервис будет запущен и добавлен в автозагрузку. Проверить можно так:

systemctl status nginx
ss -tlnp | grep ':80'

3. Проверка дефолтной страницы

Откройте в браузере http://<ip-вашего-сервера>/ — должна открыться приветственная страница «Welcome to nginx!». Если страница не открывается — скорее всего, мешает файрвол. Откройте порты 80 и 443:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw reload

4. Структура конфигурации

В Debian Nginx разложен так:

5. Свой виртуальный хост

Создадим простой vhost для домена example.com:

sudo tee /etc/nginx/sites-available/example.com.conf >/dev/null <<'EOF'
server {
    listen 80;
    server_name example.com www.example.com;

    root /var/www/example.com;
    index index.html;

    location / {
        try_files $uri $uri/ =404;
    }
}
EOF

sudo mkdir -p /var/www/example.com
echo '<h1>It works</h1>' | sudo tee /var/www/example.com/index.html
sudo ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/

Проверим синтаксис и перезагрузим конфиг:

sudo nginx -t
sudo systemctl reload nginx

6. HTTPS через Let's Encrypt

Для бесплатных сертификатов используем certbot:

sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com

Certbot сам добавит блоки listen 443 ssl;, подставит пути к сертификату и перезагрузит Nginx. Автообновление включено по умолчанию через systemd-таймер certbot.timer.

7. Что включить «на будущее»

По мере роста проекта пригодится: gzip/brotli-сжатие, кэш статики (expires), HTTP/2, заголовки безопасности (Strict-Transport-Security, X-Content-Type-Options), rate-limit для чувствительных эндпоинтов, отдельный лог-формат под аналитику. Но это всё — поверх описанной выше базы.

Итог

За пять команд мы получили рабочий веб-сервер с собственным vhost'ом и валидным TLS. Дальше — наполнять контентом и подкручивать конфиг под нагрузку.