Я только что отлаживал сайт (с Lighthouse 3.2.0), для которого у меня был включен http / 2 на прокси-сервере nginx (1.15.9 / официальный образ докера) с
listen 443 ssl http2;
но Lighthouse по-прежнему сказал, что все ресурсы были загружены через http / 1.1, когда я обнаружил, что почти все мои другие сайты, которые также доставляются через этот прокси-сервер nginx, проходят тест http2 (и на самом деле все ресурсы доставляются через h2
для этих сайтов).
Однако все их строфы для прослушивания определенно содержат только
listen 443 ssl;
и во всем конфиге только один сайт с http2
.
Так что же здесь может происходить? Меня больше интересует почему h2
кажется, что он включен, хотя я никогда не настраивал его, кроме одного сайта, который его не доставляет (возможно, это связано с тем, что на другой стороне есть node.js proxy_pass
или что-то другое...).
Является http2
по умолчанию для новых версий nginx независимо от строфы прослушивания? Ничего подобного в документации не нашел ...
Обсуждается здесь: https://stackoverflow.com/questions/40987592/can-i-enable-http-2-for-specific-server-blocks-virtual-hosts-only-on-nginx
Обычно, когда вы включаете HTTP / 2 на одном listen
директива, все они в одном и том же ip / порту получают HTTP / 2. Теоретически SNI позволит серверу видеть запрошенный виртуальный хост (по крайней мере, для клиентов с поддержкой SNI на TLSv1 или выше), а затем отвечать настройками ALPN, соответствующими этому виртуальному хосту, но это сложно, и на практике большинство серверов не дифференцируйте этот способ и повторно используйте одни и те же настройки SSL / TLS на всех общих виртуальных хостах на этом IP / порту.
Я не могу объяснить, по крайней мере, без дополнительной информации, почему Lighthouse решил, что ваш виртуальный хост HTTP / 2 был только HTTP / 1.1.