Utiliser HTTP / 2.0 entre le proxy inverse nginx et le serveur Web principal

19

J'utilise nginx comme proxy-ssl inverse devant un serveur web backend capable de faire HTTP / 2.0.

J'ai remarqué que nginx proxy les demandes au serveur principal via HTTP / 1.1 plutôt que HTTP / 2.0. Est-il possible de dire à nginx d'utiliser une connexion HTTP / 2.0 non chiffrée à la place? Cela augmenterait-il les performances?

S1lentSt0rm
la source
bien que les spécifications http2 disent qu'il ne nécessite pas de cryptage, nginx ne prend actuellement pas en charge http2 sans SSL.
Marco
Il utiliserait donc HTTP / 2.0 si j'avais spécifié une adresse https: //? Eh bien, je suppose que je préfère utiliser HTTP / 1.1. Cela n'a pas de sens de chiffrer le trafic deux fois et les performances de HTTP / 2.0 avec ssl ne seraient probablement pas aussi bonnes que HTTP / 1.1 sans ssl, n'est-ce pas? Je veux dire, ce genre de
chose
Peu importe que vous chiffriez le trafic entre le serveur frontal et le serveur principal s'ils se trouvent sur la même machine. quant aux performances: http2 est un peu plus rapide que http1.1, même avec cryptage. ne peut pas dire sans essayer si cela ferait une différence.
Marco

Réponses:

21

Trouvé ceci: https://trac.nginx.org/nginx/ticket/923

Il n'est pas prévu d'implémenter la prise en charge HTTP / 2 dans le module proxy dans un avenir prévisible

Extrait d'un mail référencé dans le ticket:

Cela n'a presque aucun sens de l'implémenter, car le principal avantage de HTTP / 2 est qu'il permet de multiplexer de nombreuses demandes au sein d'une même connexion, supprimant ainsi [presque] la limite du nombre de demandes simultanées - et il n'y a pas de telle limite lorsque vous parlez à vos propres backends. De plus, les choses peuvent même empirer lors de l'utilisation de HTTP / 2 pour les backends, en raison de l'utilisation d'une seule connexion TCP au lieu de plusieurs.

S1lentSt0rm
la source
9
Il semble que cela signifie que vous ne pouvez pas utiliser HTTP / 2 Server Push si vous utilisez le proxy avec nginx, même si le serveur principal le prendrait en charge s'il était directement accessible.
thomasrutter
3
J'utilise des proxys inverses nginx pour les sites non locaux sur des connexions lentes afin que HTTP / 2 m'aide.
Dommage
5

Malheureusement, nginx ne prend pas en charge le proxy vers un serveur backend http / 2, référencé sur https://www.nginx.com/blog/http2-module-nginx/#QandA

Q: Allez-vous également prendre en charge HTTP / 2 du côté amont, ou prendre en charge uniquement HTTP / 2 du côté client?

R: Pour le moment, nous ne prenons en charge que HTTP / 2 côté client. Vous ne pouvez pas configurer HTTP / 2 avec proxy_pass. [Éditeur - Dans la version originale de cet article, cette phrase a été incorrectement transcrite comme «Vous pouvez configurer HTTP / 2 avec proxy_pass». Nous nous excusons pour toute confusion que cela pourrait avoir causée.]

Mais quel est l'intérêt de HTTP / 2 du côté backend? Parce que, comme vous pouvez le voir sur les benchmarks, HTTP / 2 ne présente pas beaucoup d'avantages pour les réseaux à faible latence tels que les connexions en amont.

De plus, dans NGINX, vous avez le module keepalive et vous pouvez configurer un cache keepalive. Le principal avantage en termes de performances de HTTP / 2 est d'éliminer les prises de contact supplémentaires, mais si vous le faites déjà avec un cache keepalive, vous n'avez pas besoin de HTTP / 2 du côté amont.

tangxinfa
la source