Как установить 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.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 (шаги практически идентичны для обеих версий)
- Непривилегированный пользователь с
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 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 (Перенаправить) — это рекомендуемый выбор.
Проверьте автоматическое обновление сертификата
Сертификаты 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в качестве протокола для запросов вашего домена
Метод 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 и всего вашего веб-стека с максимальной эффективностью.
на всех хостинговых услугах