Сэкономьте 15% на всех хостинговых услугах

Проверьте свои навыки и получите скидку на любой тарифный план

Используйте код: Skills Начать
Рубрики
Linux Администрация Безопасность

Как установить Nginx с поддержкой HTTP/2 на Ubuntu (Полное руководство)

Nginx — один из наиболее широко развёрнутых веб-серверов в мире, известный своей исключительной производительностью, низким потреблением памяти и способностью обрабатывать тысячи одновременных соединений. В сочетании с HTTP/2 Nginx становится ещё более мощной платформой — обеспечивая мультиплексирование запросов, сжатие заголовков, server push и значительное сокращение времени загрузки страниц.

Это подробное руководство проведёт вас через каждый шаг, необходимый для установки Nginx с полной поддержкой HTTP/2 на Ubuntu 20.04 и Ubuntu 22.04 LTS, от начальной настройки через конфигурацию SSL, оптимизацию блоков сервера и проверку в реальном времени.

> Для кого это руководство? Системные администраторы, разработчики и владельцы веб-сайтов, которые хотят максимизировать производительность веб-сервера на Linux-сервере. Если вы запускаете свой сайт на плане VPS Hosting или Dedicated Server, это руководство применимо непосредственно к вашей среде.

Что такое HTTP/2 и почему это важно?

HTTP/2 — это вторая основная версия протокола передачи гипертекста, стандартизированная в RFC 7540. Она была разработана для устранения ограничений производительности HTTP/1.1, который используется с 1997 года.

Ключевые преимущества HTTP/2 над HTTP/1.1:

ФункцияHTTP/1.1HTTP/2
МультиплексированиеОдин запрос на соединениеНесколько одновременных запросов
Сжатие заголовковЗаголовки в открытом видеСжатие HPACK
Server pushНе поддерживаетсяПоддерживается
Бинарный протоколТекстовыйБинарное фреймирование
Повторное использование соединенияОграниченноеПолностью постоянное
ЗадержкаВышеЗначительно снижена

Для владельцев веб-сайтов включение HTTP/2 напрямую приводит к более быстрой загрузке страниц, лучшим показателям Core Web Vitals и улучшенным рейтингам SEO — поскольку Google использует скорость страницы как сигнал ранжирования.

> Важно: HTTP/2 требует HTTPS (TLS/SSL). Вы не можете использовать HTTP/2 через незашифрованное соединение ни в одном современном браузере. Именно поэтому получение SSL-сертификата является обязательным этапом в этом руководстве. Если вам нужен доверенный сертификат для вашего домена, AlexHost предлагает SSL Certificates для всех случаев использования.

Предварительные требования

Перед началом убедитесь, что у вас есть следующее:

  • Сервер с Ubuntu 20.04 LTS или Ubuntu 22.04 LTS (шаги практически идентичны для обеих версий)
  • Непривилегированный пользователь с sudo привилегиями или прямой доступ root
  • Зарегистрированное доменное имя, указывающее на IP-адрес вашего сервера через A-запись
  • Открытые порты 80 и 443 в вашем брандмауэре (UFW или iptables)
  • Базовое знакомство с командной строкой Linux

Если у вас еще нет домена, вы можете зарегистрировать его прямо через регистрацию доменов AlexHost и указать его на ваш сервер в течение нескольких минут.

Шаг 1 — Обновление индекса пакетов системы

Всегда начинайте с обновления индекса пакетов, чтобы убедиться, что вы устанавливаете последние доступные версии всего программного обеспечения:

sudo apt update && sudo apt upgrade -y

Эта команда обновляет локальный список пакетов и обновляет любые устаревшие пакеты, уже установленные в вашей системе.

Шаг 2 — Установка Nginx

Установка пакета Nginx

Репозитории Ubuntu по умолчанию включают стабильную версию Nginx. Установите её с помощью:

sudo apt install nginx -y

Запуск сервиса Nginx

После установки немедленно запустите сервис Nginx:

sudo systemctl start nginx

Включение автоматического запуска Nginx при загрузке

Убедитесь, что Nginx запускается автоматически при каждой перезагрузке сервера:

sudo systemctl enable nginx

Проверка работы Nginx

Подтвердите, что сервис активен и работает:

sudo systemctl status nginx

Вы должны увидеть вывод, похожий на:

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since ...

Разрешение трафика Nginx через брандмауэр

Если UFW активен на вашем сервере, разрешите HTTP и HTTPS трафик:

sudo ufw allow 'Nginx Full'
sudo ufw status

Nginx Full открывает оба порта 80 (HTTP) и 443 (HTTPS), которые необходимы для этой конфигурации.

Шаг 3 — Установка OpenSSL

HTTP/2 зависит от TLS, который в свою очередь зависит от OpenSSL. Установите его, чтобы убедиться, что все криптографические зависимости доступны:

sudo apt install openssl -y

Проверьте установленную версию:

openssl version

Вы должны увидеть вывод вроде OpenSSL 3.0.x или аналогичный. Любая версия выше 1.0.2 полностью поддерживает наборы шифров, необходимые для HTTP/2.

Шаг 4 — Получите бесплатный SSL-сертификат с Let’s Encrypt

Let’s Encrypt предоставляет бесплатные, автоматически обновляемые SSL/TLS-сертификаты, доверенные всеми основными браузерами. Клиент Certbot делает весь процесс простым.

Установите Certbot и плагин Nginx

sudo apt install certbot python3-certbot-nginx -y

Запросите ваш SSL-сертификат

Замените your_domain.com на ваше фактическое зарегистрированное доменное имя:

sudo certbot --nginx -d your_domain.com -d www.your_domain.com

Certbot будет:

  1. Проверять владение доменом через HTTP-вызов
  2. Выдать сертификат от Let’s Encrypt
  3. Автоматически изменить конфигурацию Nginx для использования сертификата
  4. Настроить перенаправления HTTPS с HTTP

Следуйте интерактивным подсказкам. Когда вас спросят, перенаправлять ли трафик HTTP на HTTPS, выберите вариант 2 (Перенаправить) — это рекомендуемый выбор.

Проверьте автоматическое обновление сертификата

Сертификаты Let’s Encrypt истекают через 90 дней. Certbot устанавливает задачу cron или таймер systemd для их автоматического обновления. Протестируйте процесс обновления с пробным запуском:

sudo certbot renew --dry-run

Если ошибок не появляется, автоматическое обновление настроено правильно.

> Совет: Для производственных сред с несколькими доменами или подстановочными сертификатами рассмотрите Dedicated Server для полного контроля над инфраструктурой SSL.

Шаг 5 — Настройка Nginx для HTTP/2

Теперь, когда SSL установлен, вам нужно явно включить HTTP/2 в конфигурации блока сервера Nginx.

Откройте файл конфигурации Nginx

Конфигурация сайта по умолчанию находится по адресу:

sudo nano /etc/nginx/sites-available/default

Если вы создали пользовательский блок сервера для вашего домена (рекомендуется), откройте этот файл вместо этого:

sudo nano /etc/nginx/sites-available/your_domain.com

Обновите блок сервера для включения HTTP/2

Найдите директиву listen 443 ssl;. Certbot добавит это автоматически. Измените его, чтобы включить http2:

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    server_name your_domain.com www.your_domain.com;

    # SSL Certificate paths (set by Certbot)
    ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    root /var/www/your_domain.com/html;
    index index.html index.htm index.php;

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

# HTTP to HTTPS redirect block
server {
    listen 80;
    listen [::]:80;
    server_name your_domain.com www.your_domain.com;
    return 301 https://$host$request_uri;
}

Критическое изменение находится в строке listen: добавление http2 после ssl активирует протокол HTTP/2 для этого виртуального хоста.

Сохраните и выйдите

Нажмите CTRL + X, затем Y, затем Enter для сохранения файла и выхода из редактора nano.

Шаг 6 — Оптимизируйте конфигурацию Nginx HTTP/2

Простое включение HTTP/2 — это хороший старт, но применение дополнительных оптимизаций обеспечивает максимальную производительность вашей установки.

Рекомендуемые параметры SSL и производительности

Добавьте или проверьте следующие директивы внутри вашего server блока:

# Modern TLS protocols only
ssl_protocols TLSv1.2 TLSv1.3;

# Strong cipher suites compatible with HTTP/2
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256;
ssl_prefer_server_ciphers off;

# SSL session caching for performance
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 1d;
ssl_session_tickets off;

# OCSP Stapling
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 5s;

# HTTP Strict Transport Security (HSTS)
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;

# Additional security headers
add_header X-Frame-Options DENY;
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";

# Gzip compression (complements HTTP/2)
gzip on;
gzip_vary on;
gzip_proxied any;
gzip_comp_level 6;
gzip_types text/plain text/css text/xml application/json application/javascript application/rss+xml application/atom+xml image/svg+xml;

> Примечание о HTTP/2 и Gzip: HTTP/2 использует собственное сжатие заголовков HPACK, но включение Gzip для тел ответов по-прежнему обеспечивает значительную экономию полосы пропускания для текстовых ресурсов.

Шаг 7 — Проверка конфигурации Nginx

Никогда не перезапускайте Nginx без предварительной проверки конфигурации на синтаксические ошибки. Неправильно настроенный файл может привести к отказу всего веб-сервера.

Запустите встроенный тест конфигурации:

sudo nginx -t

Успешный тест выдает:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Если вы видите какие-либо ошибки, внимательно проверьте вывод. Сообщение об ошибке будет включать имя файла и номер строки, где была обнаружена проблема.

Шаг 8 — Перезагрузка Nginx и применение изменений

После успешного прохождения теста конфигурации перезагрузите Nginx, чтобы применить все изменения:

sudo systemctl restart nginx

Или, если вы предпочитаете перезагрузку без простоя (которая применяет изменения конфигурации без разрыва активных соединений):

sudo systemctl reload nginx

Для включения HTTP/2 конкретно рекомендуется полная перезагрузка, чтобы убедиться, что новые параметры протокола полностью инициализированы.

Шаг 9 — Проверка активности HTTP/2

После перезагрузки Nginx подтвердите, что HTTP/2 действительно предоставляется клиентам, используя один из следующих методов.

Метод 1: Использование curl

Инструмент командной строки curl может сообщить версию используемого протокола:

curl -I --http2 https://your_domain.com

Ищите заголовок ответа:

HTTP/2 200

Если вы видите HTTP/2 200, HTTP/2 работает правильно.

Метод 2: Использование команды OpenSSL

openssl s_client -connect your_domain.com:443 -alpn h2

В выводе ищите:

ALPN protocol: h2

h2 — это идентификатор ALPN для HTTP/2. Если вы видите это, ваш сервер правильно объявляет поддержку HTTP/2 во время TLS-рукопожатия.

Метод 3: Использование инструментов разработчика браузера

  1. Откройте ваш веб-сайт в Google Chrome или Mozilla Firefox
  2. Нажмите F12 для открытия инструментов разработчика
  3. Перейдите на вкладку Network
  4. Перезагрузите страницу (F5 или Ctrl+R)
  5. Щелкните правой кнопкой мыши на любом заголовке столбца в списке запросов и включите столбец Protocol
  6. Вы должны увидеть h2 в качестве протокола для запросов вашего домена

Метод 4: Использование онлайн-инструмента тестирования HTTP/2

Посетите https://tools.keycdn.com/http2-test и введите ваш домен. Инструмент подтвердит, активен ли HTTP/2, и предоставит дополнительные сведения о конфигурации TLS вашего сервера.

Устранение распространенных проблем

HTTP/2 не отображается в браузере несмотря на конфигурацию

  • Причина: Браузер кэшировал старое соединение HTTP/1.1.
  • Решение: Очистите кэш браузера и файлы cookie или протестируйте в приватном/инкогнито окне.

nginx -t возвращает ошибки SSL сертификата

  • Причина: Неправильные пути к сертификатам в файле конфигурации.
  • Решение: Проверьте точные пути с помощью sudo ls /etc/letsencrypt/live/your_domain.com/ и обновите директивы ssl_certificate и ssl_certificate_key соответственно.

Порт 443 недоступен

  • Причина: Брандмауэр блокирует HTTPS трафик.
  • Решение: Выполните sudo ufw allow 443/tcp и проверьте с помощью sudo ufw status.

Certbot не проходит проверку домена

  • Причина: A запись DNS еще не распространена или порт 80 заблокирован.
  • Решение: Проверьте, что ваш домен разрешается на правильный IP с помощью dig your_domain.com A. Убедитесь, что порт 80 открыт для ACME HTTP challenge.

unknown directive "http2" ошибка в Nginx

  • Причина: Версия Nginx слишком старая (до 1.9.5) или была скомпилирована без поддержки HTTP/2.
  • Решение: Обновите Nginx. На Ubuntu 20.04+ версия из стандартного репозитория поддерживает HTTP/2. Вы также можете добавить официальный PPA Nginx: sudo add-apt-repository ppa:nginx/stable && sudo apt update && sudo apt upgrade nginx.

Заключение

Вы успешно установили Nginx с полной поддержкой HTTP/2 на Ubuntu. Вот краткое описание всего достигнутого:

  • ✅ Установлен и включен Nginx как системный сервис
  • ✅ Получен бесплатный автоматически обновляемый SSL-сертификат через Let's Encrypt и Certbot
  • ✅ Настроен блок сервера Nginx с директивой http2
  • ✅ Применено усиление TLS, закрепление OCSP, HSTS и сжатие Gzip
  • ✅ Протестирована конфигурация и подтверждена активность HTTP/2

Включение HTTP/2 — это одна из оптимизаций с наибольшим влиянием и наименьшими затратами усилий, которую вы можете применить к веб-серверу. В сочетании с надежными настройками TLS и правильными заголовками кэширования это значительно улучшает время загрузки страниц, показатели Core Web Vitals и, в конечном итоге, рейтинг вашего сайта в поисковых системах.

Поддерживайте стек в актуальном состоянии: Регулярно запускайте sudo apt update && sudo apt upgrade для обновления Nginx, OpenSSL и Certbot с последними патчами безопасности.

Повысьте производительность сервера дальше

Прирост производительности от HTTP/2 наиболее заметен на быстрой и надежной инфраструктуре. Если вы в настоящее время используете общий хостинг и достигли пределов ресурсов, рассмотрите возможность перехода на план VPS Hosting для получения выделенных ресурсов и полного доступа root. Для приложений с высокой нагрузкой Dedicated Servers обеспечивают непревзойденную производительность. Вы также можете легко управлять окружением сервера с помощью VPS с cPanel, если вы предпочитаете графический интерфейс командной строке.

Независимо от ваших потребностей в инфраструктуре, AlexHost предоставляет платформу для запуска Nginx, HTTP/2 и всего вашего веб-стека с максимальной эффективностью.