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 разложен так:
/etc/nginx/nginx.conf— главный конфиг./etc/nginx/sites-available/— описания виртуальных хостов./etc/nginx/sites-enabled/— симлинки на активные хосты./var/log/nginx/— логи доступа и ошибок./var/www/html/— дефолтный web-root.
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. Дальше — наполнять контентом и подкручивать конфиг под нагрузку.