Usa HTTP / 2.0 tra nginx reverse-proxy e backend webserver


19

Uso nginx come reverse-ssl-proxy davanti a un server web back-end in grado di fare HTTP / 2.0.

Ho notato che nginx inoltra le richieste al server back-end tramite HTTP / 1.1 anziché HTTP / 2.0. È possibile dire a nginx di utilizzare invece una connessione HTTP / 2.0 non crittografata? Questo aumenterebbe le prestazioni?


sebbene le specifiche di http2 affermino che non richiede crittografia, al momento nginx non supporta http2 senza ssl.
Marco

Quindi userebbe HTTP / 2.0 se avessi specificato un indirizzo https: //? Bene, allora credo di essere migliore dell'uso di HTTP / 1.1. Non ha senso crittografare il traffico due volte e le prestazioni di HTTP / 2.0 con ssl probabilmente non sarebbero buone come HTTP / 1.1 senza ssl, vero? Voglio dire, quel tipo di cose rende il proxy inverso SSL inutile;)
S1lentSt0rm

Non importa se si crittografa il traffico tra server front e backend se si trovano sulla stessa macchina. per quanto riguarda le prestazioni: http2 è un po 'più veloce di http1.1, anche con la crittografia. non posso dire senza provare se farebbe la differenza.
Marco

Risposte:


21

Trovato questo: https://trac.nginx.org/nginx/ticket/923

Non è previsto l'implementazione del supporto HTTP / 2 nel modulo proxy nel prossimo futuro

Estratto da una mail referenziata nel ticket:

Non ha quasi senso implementarlo, poiché il vantaggio principale di HTTP / 2 è che consente di multiplexare molte richieste all'interno di una singola connessione, eliminando così [quasi] il limite al numero di richieste simaltene - e non esiste tale limite quando si parla con i tuoi backend. Inoltre, le cose potrebbero persino peggiorare quando si utilizza HTTP / 2 per i backend, a causa della singola connessione TCP utilizzata anziché di più.


9
Sembra che ciò significhi che non è possibile utilizzare HTTP / 2 Server Push se si esegue il proxy con nginx, anche se il server back-end lo supporterebbe altrimenti se vi si accedesse direttamente.
thomasrutter,

3
Uso i proxy inversi nginx per siti non locali su connessioni lente, quindi HTTP / 2 mi aiuterebbe. È un peccato che gli sviluppatori di nginx non abbiano preso in considerazione quel caso d'uso :-(.
markhep

5

Purtroppo nginx non supporta il proxy su un server back-end http / 2, a cui si fa riferimento da https://www.nginx.com/blog/http2-module-nginx/#QandA

D: Supporterai anche HTTP / 2 sul lato upstream o supporterai solo HTTP / 2 sul lato client?

A: Al momento, supportiamo solo HTTP / 2 sul lato client. Non è possibile configurare HTTP / 2 con proxy_pass. [Editor - Nella versione originale di questo post, questa frase è stata erroneamente trascritta come "È possibile configurare HTTP / 2 con proxy_pass." Ci scusiamo per l'eventuale confusione che ciò può aver causato.]

Ma qual è il punto di HTTP / 2 sul lato backend? Perché, come puoi vedere dai benchmark, non c'è molto vantaggio in HTTP / 2 per le reti a bassa latenza come le connessioni a monte.

Inoltre, in NGINX hai il modulo keepalive e puoi configurare una cache keepalive. Il principale vantaggio in termini di prestazioni di HTTP / 2 è l'eliminazione di ulteriori handshake, ma se lo si fa già con una cache keepalive, non è necessario HTTP / 2 sul lato upstream.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.