Wolf
Roman Grossi
Tobishua
Digital nomad and originality

Следующий мануал посвящён проблеме с которой я боролся весь вечер и в итоге победил её перерыв весь Google, кучу форумов (в том числе японские) и другие источники информации, в которых не оказалось ничего полезного касательно моей проблемы.

HTTP/2

Описывать буду всё пошагово, а в конце укажу некоторые проблемы, которые пришлось решить.

Первый шаг: обновление nginx (буду рассматривать вариант при котором он уже установлен).

Для того, чтобы обновить nginx необходимо добавить репозиторий, т.к. в дефолтных репозиториях последняя доступная версия: nginx/1.8.0.

1. Открываем sources.list для редактирования

nano /etc/apt/sources.list

2. Вставляем в любое место следующие репозитории

deb http://nginx.org/packages/mainline/ubuntu/ precise nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ precise nginx

(у меня указано имя дистрибутива precise, т.к. использую Ubuntu 12.04, в случае, если у вас используется другая версия, необходимо заменить имя)

3. Сохраняем

Теперь самое время обновить список доступных пакетов. Для этого используем всем знакомую команду

apt-get update

С этого момента у меня начались первые сложности: При попытке выполнить стандартные команды для обновления пакета

apt-get upgrade

или

apt-get dist-upgrade

apt упорно ругался выдавая в терминал следующие непотребства:

dpkg: error processing /var/cache/apt/archives/nginx_1.9.5-1~precise_amd64.deb (--unpack):
 trying to overwrite '/usr/sbin/nginx', which is also in package nginx-full 1.8.0-1+precise1
dpkg-deb: error: subprocess paste was killed by signal (Broken pipe)
Errors were encountered while processing:
 /var/cache/apt/archives/nginx_1.9.5-1~precise_amd64.deb
E: Sub-process /usr/bin/dpkg returned an error code (1)

Решается данная ситуация довольно просто:

1. Для начала удалим nginx (да-да, в этом нет ничего страшного, конфиги останутся, если не сделать purge)

apt-get remove nginx*

2. Когда nginx удалён, мы снова его установим (очевидно же!)

apt-get install nginx

По окончанию установки проверим версию nginx:

# nginx -v
nginx version: nginx/1.9.5

Отлично! Версия 1.9.5 как раз то, что нужно!

Теперь пришло время настроить HTTP/2. 

Я не буду расписывать, что для использования HTTP/2 необходим SSL-сертификат, как и не буду описывать процесс установки SSL-сертификата на nginx (мануалов по этому поводу в Google более чем достаточно). Поэтому сразу приступим к установке HTTP/2. 

Всё, что для этого нужно: заменить вот это:

listen 443 ssl;

на вот это:

listen 443 ssl http2;

Если описать словами, то в директиве, в которой указан порт для SSL нужно дописать "http2" (также, сам параметр тоже может отличаться, например изначально он может иметь следующее значение: "listen 8.8.8.8:443;" (где 8.8.8.8 - IP-адрес вашего сервера).

Теперь проверим конфигурацию nginx на ошибки:

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

Если вывод такой же, как указан выше, можно смело перезапускать nginx:

service nginx restart

По идее, если после этого проверить сайт на поддержку HTTP/2, всё должно быть в порядке, но нет!

Первая проблема: Необходимо перенаправление с http на https.

Делается это просто: В конфиге домена необходимо указать следующие параметры внутри блока location / 

location / {
	return 301 https://$host$request_uri;
}

Вторая проблема (не могу её объяснить, поэтому просто приведу последовательность команд для её решения)

service nginx stop
fuser -k 443/tcp
service nginx start

То есть, необходимо остановить nginx и прибить все оставшиеся процессы, которые занимают 443 порт.

После этого HTTP/2 будет точно настроен.

02.04.2017 (22:26)
Алекс

Добрый день. Добавил себе на сайте https://mobiappsystems.ru/ HTTP/2. Но вот firebug в firefox в заголовках пишет Версия: HTTP/1.1 В чем может быть проблема? Версия Nginx 1.11.6, в конфиге все указал: listen 443 ssl http2;