Verwenden Sie HTTP / 2.0 zwischen dem Nginx-Reverse-Proxy und dem Back-End-Webserver

19

Ich benutze Nginx als Reverse-SSL-Proxy vor einem Backend-Webserver, der HTTP / 2.0 kann.

Ich habe festgestellt, dass Nginx die Anfragen über HTTP / 1.1 anstatt über HTTP / 2.0 an den Backend-Server weiterleitet. Kann man nginx anweisen, stattdessen eine unverschlüsselte HTTP / 2.0-Verbindung zu verwenden? Würde dies die Leistung steigern?

S1lentSt0rm
quelle
Obwohl die http2-Spezifikationen besagen, dass keine Verschlüsselung erforderlich ist, unterstützt nginx derzeit http2 ohne ssl nicht.
Marco
Es würde also HTTP / 2.0 verwenden, wenn ich eine https: // Adresse angegeben hätte. Nun, dann denke ich, bin ich besser mit HTTP / 1.1. Es ist nicht sinnvoll, den Datenverkehr zweimal zu verschlüsseln, und die Leistung von HTTP / 2.0 mit SSL wäre wahrscheinlich nicht so gut wie HTTP / 1.1 ohne SSL, oder? Ich meine, diese Art macht den Reverse-SSL-Proxy nutzlos;)
S1lentSt0rm
Es spielt keine Rolle, ob Sie den Datenverkehr zwischen Front-End- und Back-End-Server verschlüsseln, wenn sich diese auf demselben Computer befinden. Was die Leistung angeht: http2 ist sogar mit Verschlüsselung viel schneller als http1.1. kann nicht sagen, ohne zu versuchen, ob es einen Unterschied machen würde.
Marco

Antworten:

21

Gefunden: https://trac.nginx.org/nginx/ticket/923

Auf absehbare Zeit ist keine Implementierung von HTTP / 2-Unterstützung im Proxy-Modul geplant

Auszug aus einer Mail, auf die im Ticket verwiesen wird:

Die Implementierung ist praktisch sinnlos, da der Hauptvorteil von HTTP / 2 darin besteht, dass viele Anforderungen innerhalb einer einzigen Verbindung gemultiplext werden können, wodurch die Begrenzung der Anzahl der gleichzeitigen Anforderungen [fast] aufgehoben wird Ihre eigenen Backends. Darüber hinaus kann es bei Verwendung von HTTP / 2 für Backends sogar zu einer Verschlechterung kommen, da statt mehrerer TCP-Verbindungen nur eine einzige TCP-Verbindung verwendet wird.

S1lentSt0rm
quelle
9
Es sieht so aus, als ob Sie HTTP / 2 Server Push nicht verwenden können, wenn Sie Nginx als Proxy verwenden, selbst wenn der Back-End-Server dies andernfalls unterstützen würde, wenn direkt darauf zugegriffen würde.
Thomasrutter
3
Ich verwende Nginx-Reverse-Proxys für nicht lokale Sites über langsame Verbindungen, sodass mir HTTP / 2 helfen würde. Es ist eine Schande, dass die Nginx-Entwickler diesen Anwendungsfall nicht berücksichtigt haben :-(.
markshep
5

Leider unterstützt nginx keinen Proxy für einen http / 2-Backend-Server, auf den unter https://www.nginx.com/blog/http2-module-nginx/#QandA verwiesen wird

F: Unterstützen Sie HTTP / 2 auch auf der Upstream-Seite oder nur HTTP / 2 auf der Client-Seite?

A: Momentan unterstützen wir nur HTTP / 2 auf der Clientseite. Sie können HTTP / 2 nicht mit proxy_pass konfigurieren. [Editor - In der Originalversion dieses Beitrags wurde dieser Satz fälschlicherweise als "Sie können HTTP / 2 mit proxy_pass konfigurieren" transkribiert. Wir entschuldigen uns für etwaige Unklarheiten.]

Aber wozu dient HTTP / 2 auf der Backend-Seite? Wie Sie den Benchmarks entnehmen können, bietet HTTP / 2 für Netzwerke mit geringer Latenz, wie z. B. Upstream-Verbindungen, keinen großen Vorteil.

In NGINX haben Sie außerdem das Keepalive-Modul und können einen Keepalive-Cache konfigurieren. Der Hauptvorteil von HTTP / 2 in Bezug auf die Leistung besteht darin, zusätzliche Handshakes zu vermeiden. Wenn Sie dies jedoch bereits mit einem Keepalive-Cache tun, benötigen Sie kein HTTP / 2 auf der Upstream-Seite.

Tangxinfa
quelle