15%

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

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

Используйте код:

Skills
Начать
01.11.2024

Как установить 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, это руководство применимо непосредственно к вашей среде.

Оглавление

  1. Что такое HTTP/2 и почему это важно?
  2. Предварительные требования
  3. Шаг 1 — Обновление индекса пакетов системы
  4. Шаг 2 — Установка Nginx
  5. Шаг 3 — Установка OpenSSL
  6. Шаг 4 — Получение бесплатного SSL-сертификата с Let’s Encrypt
  7. Шаг 5 — Конфигурация Nginx для HTTP/2
  8. Шаг 6 — Оптимизация конфигурации Nginx HTTP/2
  9. Шаг 7 — Тестирование конфигурации Nginx
  10. Шаг 8 — Перезагрузка Nginx и применение изменений
  11. Шаг 9 — Проверка активности HTTP/2
  12. Устранение распространённых проблем
  13. Заключение

Что такое 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 (шаги практически идентичны для обеих версий)
  • Пользователь без прав root с sudo привилегиями или прямой доступ root
  • Зарегистрированное доменное имя, указывающее на IP-адрес вашего сервера через A-запись
  • Открытые порты 80 и 443 в вашем брандмауэре (UFW или iptables)
  • Базовое знакомство с командной строкой Linux

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

Шаг 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 (Redirect) — это рекомендуемый выбор.

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

Сертификаты 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 в качестве протокола для запросов в
15%

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

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

Используйте код:

Skills
Начать