Имею следующую инфраструктуру:
80 -> Varnish -> Backend (NGINX, port 8080)
443 -> NGINX (SSL-Termination with HTTP/2 enabled) -> Varnish -> Backend (NGINX, port 8080)
Я знаю, что можно включить HTTP/2
протокол для внешних подключений с использованием -p feature=+http2
параметр для Varnish (порт 80), а как насчет бэкэнд-соединений? varnishlog -b
показывает мне, что вся внутренняя коммуникация осуществляется с использованием HTTP/1.0
и HTTP/1.1
.
Я был бы очень рад, если бы кто-нибудь мог сказать мне, какова общая практика в отношении Varnish и NGINX:
HTTP/2
для внутренних соединений?-p feature=+http2
параметр включен для 443 -> NGINX (SSL-Termination with HTTP/2 enabled) -> Varnish
коммуникация с точки зрения производительности?Что касается внутренней коммуникации (которая не зашифрована): я знаю, что HTTP/2
привязан к шифрованию TLS, но, возможно, есть какие-то настройки, о которых я не слышал, поэтому я думаю, что лучше спросить, чтобы быть уверенным на 100%. Спасибо за понимание.
В ответе @Michael Hampton отсутствуют некоторые моменты, поэтому вот оно:
Лак является единственное программное обеспечение, которое выполняет HTTP / 2 в комбинации Hitch + Varnish, но большинству браузеров требуется соединение TLS для работы HTTP / 2. То есть для HTTP / 2 требуется TLS-соединение, основное требование в настоящее время.
Varnish Plus поддерживает TLS, а Varnish с открытым исходным кодом - нет.
Что касается ответов:
-p feature=+http2
параметр включен для 443 -> NGINX (SSL-Termination с включенным HTTP / 2). Поскольку NGINX просто не будет передавать HTTP / 2 своему бэкэнду (Varnish), аналогично тому, как Varnish не будет передавать HTTP / 2 своему бэкэнду (например, NGINX + PHP-FPM), потому что это не имеет смысла (см. предыдущий пункт).При этом сказано:
-p feature=+http2
в комбинации Hitch + Varnish.-p feature=+http2
в NGINX (поток) + комбо Varnish ЕСЛИ Модуль потока NGINX поддерживает согласование протокола ALPN. Но это не так. Поэтому он не может правильно завершить TLS, чтобы HTTP / 2 работал.Varnish вообще не поддерживает https. Этого никогда не было и не будет.
Так называемая поддержка внешнего интерфейса http2, которую Varnish предлагает в 5.0, на самом деле отсутствует в Varnish. Скорее, он использует другое программное обеспечение, называемое зацепкой, которое представляет собой прокси-сервер, который фактически завершает TLS с помощью HTTP / 2 и передает простые HTTP-соединения на свой бэкэнд, который является внешним интерфейсом Varnish.
Все серверы Varnish поддерживают только HTTP.
Итак, при использовании HTTP / 2 это на самом деле выглядит так:
Сцепка - лак - Nginx
Хотя в этом случае лак справится с заминкой.
Короче, нет, этого нельзя.