Как установить 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 и почему это важно?
- Предварительные требования
- Шаг 1 — Обновление индекса пакетов системы
- Шаг 2 — Установка Nginx
- Шаг 3 — Установка OpenSSL
- Шаг 4 — Получение бесплатного SSL-сертификата с Let’s Encrypt
- Шаг 5 — Конфигурация Nginx для HTTP/2
- Шаг 6 — Оптимизация конфигурации Nginx HTTP/2
- Шаг 7 — Тестирование конфигурации Nginx
- Шаг 8 — Перезагрузка Nginx и применение изменений
- Шаг 9 — Проверка активности HTTP/2
- Устранение распространённых проблем
- Заключение
Что такое HTTP/2 и почему это важно?
HTTP/2 — вторая основная версия протокола передачи гипертекста, стандартизированная в RFC 7540. Она была разработана для решения проблем производительности HTTP/1.1, который используется с 1997 года.
Ключевые преимущества HTTP/2 над HTTP/1.1:
| Функция | HTTP/1.1 | HTTP/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 statusNginx 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.comCertbot будет:
- Проверять владение доменом через HTTP-вызов
- Выдавать сертификат от Let’s Encrypt
- Автоматически изменять конфигурацию Nginx для использования сертификата
- Устанавливать перенаправления 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: h2h2 — это идентификатор ALPN для HTTP/2. Если вы видите это, ваш сервер правильно объявляет поддержку HTTP/2 во время рукопожатия TLS.
Метод 3: Использование инструментов разработчика браузера
- Откройте ваш веб-сайт в Google Chrome или Mozilla Firefox
- Нажмите
F12для открытия инструментов разработчика - Перейдите на вкладку Network
- Перезагрузите страницу (
F5илиCtrl+R) - Щёлкните правой кнопкой мыши на любом заголовке столбца в списке запросов и включите столбец Protocol
- Вы должны увидеть
h2в качестве протокола для запросов в
