Кажется, что nginx использует http2 random (почти всегда) и независимо от конфигурации

Я только что отлаживал сайт (с Lighthouse 3.2.0), для которого у меня был включен http/2 на прокси-сервере nginx (1.15.9 / official docker image) с

listen 443 ssl http2;

но Lighthouse по-прежнему сказал, что все ресурсы были загружены через http/1.1, когда я узнал, что почти все мои другие сайты, которые также доставляются через этот прокси-сервер nginx, проходят тест http2 (и фактически все ресурсы доставляются через h2 для этих сайтов).

Тем не менее, все их слушающие строфы определенно имеют только

listen 443 ssl;

и во всем конфиге есть только один сайт с http2,

Так что же здесь может происходить? Меня больше интересует почему h2 Кажется, он включен, хотя я никогда не настраивал его, кроме одного сайта, который его не доставляет (возможно, это связано с тем, что на другой стороне proxy_pass или что-то другое...).
Является http2 по умолчанию для новых версий nginx, независимо от прослушивания Я не мог найти ничего подобного в документах...

1 ответ

Решение

Обсудили здесь: https://stackoverflow.com/questions/40987592/can-i-enable-http-2-for-specific-server-blocks-virtual-hosts-only-on-nginx

Как правило, после включения HTTP/2 на одном listen директива все они в одном ip / port получают HTTP/2. В теории SNI позволяет серверу видеть запрошенный виртуальный хост (по крайней мере, для клиентов с поддержкой SNI на TLSv1 или выше), а затем отвечать настройками ALPN, подходящими для этого виртуального хоста, но это сложно, и на практике большинство серверов этого не делают дифференцируйте этот способ и повторно используйте одинаковые настройки SSL/TLS на всех виртуальных хостах общего пользования на этом IP/ порте.

Я не могу объяснить, хотя, по крайней мере, без дополнительной информации, почему Маяк думал, что ваш HTTP/2 vhost был только HTTP/1.1.

Другие вопросы по тегам