Użyj protokołu HTTP / 2.0 między odwrotnym proxy nginx a serwerem zaplecza

19

Używam nginx jako proxy-ssl-proxy przed serwerem WWW zaplecza, który może obsługiwać HTTP / 2.0.

Zauważyłem, że nginx zastępuje żądania do serwera zaplecza za pośrednictwem HTTP / 1.1, a nie HTTP / 2.0. Czy można powiedzieć nginx, aby zamiast tego używał niezaszyfrowanego połączenia HTTP / 2.0? Czy zwiększyłoby to wydajność?

S1lentSt0rm
źródło
chociaż specyfikacje http2 mówią, że nie wymaga szyfrowania, nginx obecnie nie obsługuje http2 bez ssl.
Marco
Więc użyłby HTTP / 2.0, gdybym podał adres https: //? Cóż, więc myślę, że lepiej używać HTTP / 1.1. Nie ma sensu szyfrowanie ruchu dwa razy, a wydajność HTTP / 2.0 z ssl prawdopodobnie nie byłaby tak dobra jak HTTP / 1.1 bez ssl, prawda? Mam na myśli, że ten rodzaj sprawia, że ​​zwrotny serwer proxy-ssl jest bezużyteczny;)
S1lentSt0rm
Tak naprawdę nie ma znaczenia, czy szyfrujesz ruch między serwerem frontowym a backendowym, jeśli są one na tym samym komputerze. co do wydajności: http2 jest dość szybszy niż http1.1, nawet z szyfrowaniem. nie mogę powiedzieć bez próby, czy to coś zmieni.
Marco

Odpowiedzi:

21

Znaleziono to: https://trac.nginx.org/nginx/ticket/923

W najbliższej przyszłości nie ma planów wdrożenia obsługi protokołu HTTP / 2 w module proxy

Fragment wiadomości wskazanej w bilecie:

Prawie nie ma sensu go wdrażać, ponieważ główną zaletą protokołu HTTP / 2 jest to, że umożliwia multipleksowanie wielu żądań w ramach jednego połączenia, co [prawie] usuwa limit liczby równych żądań - i nie ma takiego limitu podczas rozmowy z twoje własne backendy. Co więcej, sytuacja może się nawet pogorszyć przy użyciu HTTP / 2 do backendów, z powodu użycia jednego połączenia TCP zamiast wielu.

S1lentSt0rm
źródło
9
Wygląda na to, że oznacza to, że nie możesz używać HTTP Push 2 Server Push, jeśli używasz proxy z nginx, nawet jeśli serwer backend w przeciwnym razie obsługiwałby go, gdyby był dostępny bezpośrednio.
thomasrutter
3
Korzystam z odwrotnych serwerów proxy nginx dla nielokalnych witryn przy wolnych połączeniach, więc HTTP / 2 by mi pomógł. Szkoda, że ​​programiści nginx nie
brali
5

Niestety nginx nie obsługuje proxy do serwera zaplecza http / 2, do którego odwołuje się https://www.nginx.com/blog/http2-module-nginx/#QandA

P: Czy będziesz obsługiwał HTTP / 2 również po stronie nadrzędnej, czy tylko HTTP / 2 po stronie klienta?

Odp .: W tej chwili obsługujemy HTTP / 2 tylko po stronie klienta. Nie można skonfigurować HTTP / 2 z proxy_pass. [Redaktor - W oryginalnej wersji tego postu zdanie to zostało niepoprawnie przepisane na „Możesz skonfigurować HTTP / 2 za pomocą proxy_pass”. Przepraszamy za wszelkie nieporozumienia, jakie mogło to spowodować.]

Ale jaki jest sens HTTP / 2 po stronie zaplecza? Ponieważ, jak widać z testów porównawczych, HTTP / 2 nie ma dużych korzyści w przypadku sieci o niskim opóźnieniu, takich jak połączenia typu upstream.

Ponadto w NGINX masz moduł Keepalive i możesz skonfigurować pamięć podręczną Keepalive. Główną zaletą HTTP / 2 w zakresie wydajności jest wyeliminowanie dodatkowych uścisków dłoni, ale jeśli robisz to już z pamięcią podręczną utrzymywania aktywności, nie potrzebujesz HTTP / 2 po stronie nadrzędnej.

tangxinfa
źródło