Настройка NGINX на Ubuntu 24.04 LTS: от первого запуска до HTTPS

Настройка NGINX на Ubuntu 24.04 LTS: от первого запуска до HTTPS

Рассказываем о настройке Nginx на Ubuntu 24.04: установка на VPS, обзор конфигурационных файлов, оптимизация производительности, подключение HTTPS и автоматическое получение SSL-сертификата Let's Encrypt. Подходит для развёртывания как тестовых сайтов, так и продакшен-проектов.

Лого Nginx

Введение

Nginx — высокопроизводительный веб-сервер, который одинаково эффективно работает в разных сценариях. Он может обслуживать статические сайты, динамические приложения (передавать запросы бэкендам через FastCGI), в роли реверс-прокси он направляет трафик к внутренним серверам, обеспечивая единую точку входа, SSL-терминацию и защиту от DDoS, как кеширующий балансировщик он распределяет нагрузку между серверами, кеширует ответы для снижения задержек и автоматически исключает нерабочие ноды из ротации. 

Аренда VPS/VDS от 219 руб/месяц

Преимущества VPS в AdminVPS:

✓ Бесплатное администрирование

✓ Только быстрые NVMe-диски

✓ Защита от DDoS-атак

✓ Быстрая техподдержка

Аренда VPS/VDS виртуального сервера от AdminVPS — это прозрачная и честная услуга с доступной ценой

Установка Nginx

Установить последнюю стабильную версию Nginx на Ubuntu 24.04 можно через официальный репозиторий (актуально, если требуются новые функции) или использовать стандартные пакеты Ubuntu. Мы кратко рассмотрим установку из репозитория Ubuntu:

sudo apt install nginx

Если нужна минимальная конфигурация Nginx, то установите nginx-light — пакет, оптимизированный для экономии ресурсов с ограничением части функций (отсутствуют модули geoip, image-filter, njs).

Проверьте статус службы:

sudo systemctl status nginx  

Выполните тестовый запрос:

curl -I 127.0.0.1  

Проверьте порты:

sudo ss -tulpn | grep nginx  

Важно: обязательно откройте порты в файрволе:

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

Базовая конфигурация

Виртуальные хосты в Nginx позволяют запускать несколько сайтов на одном сервере. Конфигурация организована по принципу разделения шаблонов и активных конфигов, что упрощает управление.

Структура файлов конфигурации

/etc/nginx/nginx.conf — основной конфиг, содержащий глобальные настройки:

worker_processes auto;         # автоопределение числа воркеров (рабочих процессов)
events {
  worker_connections 1024;    # максимум соединений на процесс
}
http {
  include /etc/nginx/sites-enabled/*;  # подключает активные виртуальные хосты
}

Не редактируйте его для добавления сайтов — используйте sites-available.

/etc/nginx/sites-available/ — хранит конфиги каждого сайта. Файлы здесь не влияют на NGINX до их активации.

/etc/nginx/sites-enabled/ — символьные ссылки на файлы в sites-available. Именно их читает Nginx.

Тестовая конфигурация

Создадим конфиг для тестового сайта:

sudo nano /etc/nginx/sites-available/example.ru

Добавьте базовые директивы:

server {
    listen 80;                
    listen [::]:80;
    root /var/www/example.ru; 
    index index.html;          
    server_name example.ru;   
    server_tokens off;
    location / {
        try_files $uri $uri/ =404;  # Поиск файла → папки → 404
    }
}

Разберём некоторые из них:

  • root — путь к корневому каталогу сайта;
  • index — сервер вернёт этот файл при обращении к корню (/);
  • server_name — имя домена. Если его не указать, блок станет обрабатывать все входящие запросы по умолчанию;
  • server_tokens off — скрывает версию Nginx в заголовках;
  • try_files — цепочка проверок:
    • $uri — ищет файл с указанным URI (например, /contact.html);
    • $uri/ — проверяет, есть ли директория с таким именем (вернёт index.html внутри);
    • =404 — возвращает ошибку, если ничего не найдено.

Подготовка директории сайта

Создайте каталог и тестовый html-файл:

sudo mkdir -p /var/www/example.ru
echo "<h1>Привет от example.ru!</h1>" | sudo tee /var/www/example.ru/index.html

Нужно правильно настроить права: владелец — пользователь www-data; директориям установить права 750, файлам — 640. Пример команды:

sudo chown -R www-data:www-data /var/www/example.ru
sudo chmod -R 750 /var/www/example.ru

Создайте симлинк в sites-enabled:

sudo ln -s /etc/nginx/sites-available/example.ru /etc/nginx/sites-enabled/

Протестируйте синтаксис:

sudo nginx -t

И примените изменения:

sudo systemctl reload nginx  

Локальный тест:

curl -H "Host: example.ru" http://127.0.0.1

Обратите внимание

При использовании localhost возможны конфликты между IPv4 и IPv6 — особенно если сервер настроен только на прослушивание IPv4. В таких случаях надёжнее указывать 127.0.0.1 явно.

Вывод должен содержать <h1>Привет от example.ru!</h1>.

Для внешней проверки (если DNS настроен), откройте http://example.ru в браузере.

Оптимизация Nginx под Ubuntu 24.04

Настройка воркеров

Откройте /etc/nginx/nginx.conf и добавьте в секцию main:

worker_processes auto; 
worker_rlimit_nofile 65535; 
events { 
    worker_connections 4096; 
    multi_accept on; 
}  

Эта конфигурация:

  • автоматически определяет число воркеров равное числу CPU-ядер;
  • увеличивает лимит открытых файлов для каждого процесса (необходимо для высоконагруженных окружений);
  • определяет максимальное число соединений на один воркер;
  • разрешает процессу принимать все новые соединения из очереди одновременно, а не по одному.

Для расчёта максимума соединений умножьте worker_processes на worker_connections, например, для 8 ядер: 8 × 4096 = 32768 одновременных подключений. При этом величина должна быть меньше лимита системы (проверка: ulimit -n).

Кеширование статики

В блоке http добавьте:

open_file_cache max=2000 inactive=20s; 
gzip on; 
gzip_types text/css application/javascript image/svg+xml; 
gzip_min_length 1024;  

Здесь настроено кеширование метаданных часто используемых файлов:

  • задано максимальное количество элементов в кеше;
  • удаление записей о файлах, к которым не было обращений в течение 20 секунд;
  • включено сжатие текстовых данных;
  • указаны форматы для сжатия (добавьте SVG для веб-шрифтов);
  • минимальный размер файла для сжатия (1 КБ).

Интеграция с ядром Linux 6.8

Ядро Ubuntu 24.04 включает улучшения для сетевой производительности.

Для улучшения производительности примените параметры ядра:

sudo sysctl -w net.core.somaxconn=65535
sudo sysctl -w net.ipv4.tcp_fastopen=3

Для сохранения изменений после перезагрузки создайте файл:

sudo nano /etc/sysctl.d/60-nginx-optimization.conf  

Содержимое:

net.core.somaxconn = 65535 
net.ipv4.tcp_fastopen = 3  

Включение HTTPS: Certbot + Let’s Encrypt

Теперь, когда ваш сайт работает по HTTP, пора включить защищённое HTTPS-соединение. Браузеры помечают сайты без HTTPS как небезопасные, плюс многие современные технологии (например, геолокация в браузере) вообще не работают без шифрования. Проще всего использовать бесплатные сертификаты от Let's Encrypt и инструмент Certbot для автоматизации процесса.

Начнём с установки клиента для работы с Let's Encrypt и необходимых компонентов:

sudo apt install certbot python3-certbot-nginx

python3-certbot-nginx — это плагин для автоматической интеграции с Nginx (без него пришлось бы вручную редактировать конфиги).

Получение SSL-сертификата (замените example.ru на ваш домен):

sudo certbot --nginx -d example.ru --redirect --hsts --staple-ocsp

Разберём ключевые флаги:

  • --nginx — указание плагину работать с конфигами Nginx;
  • -d example.ru — домен (можно перечислить несколько через запятую: -d site.ru -d www.site.ru);
  • --redirect — автоматическое перенаправление с HTTP на HTTPS (код 301);
  • --hsts — включает HTTP Strict Transport Security (браузер 6+ месяцев будет принудительно использовать HTTPS);
  • --staple-ocsp — активирует OCSP Stapling (ускоряет проверку отозванных сертификатов, понадобится отдельно настраивать ssl_stapling в Nginx).

При выполнении:

  • Certbot проверит принадлежность домена (через временный файл);
  • сгенерирует ключи и CSR-запрос;
  • получит сертификат от Let's Encrypt;
  • автоматически обновит конфиг Nginx;
  • добавит cron-задачу для автообновления сертификатов.

Предварительно убедитесь, что домен example.ru уже привязан к серверу в DNS (A-запись), также проверьте, что порт 443 открыт в файрволе:

sudo ufw allow 'Nginx Full'

После успешного выполнения Certbot добавит в конфиг сайта:

ssl_certificate /etc/letsencrypt/live/example.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.ru/privkey.pem;
ssl_protocols TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_trusted_certificate /etc/letsencrypt/live/example.ru/chain.pem;
ssl_stapling on;
ssl_stapling_verify on;

Поясним некоторые из них:

  • ssl_certificate — путь к публичному сертификату (включает основной и промежуточные сертификаты);
  • ssl_certificate_key — путь к приватному ключу;
  • ssl_protocols TLSv1.3 — разрешает только современный TLS 1.3 (уязвимые TLS 1.0/1.1 отключены);
  • ssl_prefer_server_ciphers on — сервер выбирает шифр независимо от предпочтений клиента.

Дополнительной ручной настройки требуют:

  • Выбор алгоритмов обмена ключами (в nginx.conf):
ssl_ecdh_curve X25519:secp384r1;
  • Настройка сессионных билетов (для ускорения, там же):
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;

Управление сертификатами:

  • просмотр списка:
sudo certbot certificates
  • для добавления поддомена:
sudo certbot --nginx -d example.ru -d sub.example.ru
  • для удаления сертификата, выданного example.ru и поддоменам:
sudo certbot delete --cert-name example.ru

Заключение

Настройка Nginx на Ubuntu 24.04 позволяет быстро и надёжно развернуть современный веб-сервер. Уже на базовом уровне он способен обрабатывать тысячи одновременных подключений, обслуживать статические файлы и передавать запросы к бэкенду. Благодаря понятной структуре конфигураций и широким возможностям масштабирования, Nginx легко адаптируется под конкретные задачи — от простых сайтов до высоконагруженных приложений.

Подключение HTTPS с помощью Certbot и Let's Encrypt упрощает защиту данных пользователей: сертификаты выпускаются бесплатно, а обновление происходит автоматически. Это критически важно не только для безопасности, но и для доверия со стороны браузеров и поисковых систем. Настройки шифрования, сессионных параметров и OCSP Stapling можно дополнительно оптимизировать под конкретные требования безопасности и скорости.

После ввода в эксплуатацию администратор может перейти к следующим шагам: настройке логирования, мониторинга нагрузки, внедрению систем автоматического масштабирования и балансировки. Также рекомендуется подключить файрвол и настроить регулярный бекап сайта и конфигурации. Всё это позволит обеспечить стабильную и безопасную работу веб-сервера в продакшене, независимо от масштаба проекта.

Читайте в блоге:

Loading spinner
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

VPN на VPS-сервере

Узнайте, как создать собственный VPN на VPS-сервере для защиты ваших конфиденциальных данных!

Что будем искать? Например,VPS-сервер

Мы в социальных сетях