Use HTTP / 2.0 entre o proxy reverso nginx e o servidor da web de back-end

19

Eu uso o nginx como um proxy reverso ssl na frente de um servidor da web de back-end capaz de executar HTTP / 2.0.

Percebi que o nginx proxies as solicitações para o servidor back-end via HTTP / 1.1 em vez de HTTP / 2.0. É possível dizer ao nginx para usar uma conexão HTTP / 2.0 não criptografada? Isso aumentaria o desempenho?

S1lentSt0rm
fonte
embora as especificações http2 digam que não requer criptografia, o nginx atualmente não suporta http2 sem ssl.
22316 Marco Marco
Portanto, ele usaria HTTP / 2.0 se eu tivesse especificado um endereço https: //? Bem, então acho que sou melhor em usar HTTP / 1.1. Não faz sentido criptografar o tráfego duas vezes e o desempenho do HTTP / 2.0 com ssl provavelmente não seria tão bom quanto o HTTP / 1.1 sem ssl, não é? Quero dizer, isso meio que torna o proxy reverso ssl inútil;) #
S1lentSt0rm 22/03
Realmente não importa se você criptografa o tráfego entre os servidores front e back-end, se eles estiverem na mesma máquina. Quanto ao desempenho: o http2 é um pouco mais rápido que o http1.1, mesmo com criptografia. não posso dizer sem tentar se isso faria diferença.
Marco

Respostas:

21

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

Não há planos para implementar o suporte a HTTP / 2 no módulo proxy em um futuro próximo.

Trecho de um email referenciado no ticket:

Quase não há sentido em implementá-lo, pois o principal benefício HTTP / 2 é que ele permite multiplexar muitas solicitações em uma única conexão, removendo [quase] o limite do número de solicitações simalteneous - e não existe esse limite ao conversar com seus próprios backends. Além disso, as coisas podem piorar ao usar o HTTP / 2 para back-end, devido ao uso de uma única conexão TCP em vez de várias.

S1lentSt0rm
fonte
9
Parece que isso significa que você não pode usar o HTTP / 2 Server Push se estiver executando proxy com o nginx, mesmo que o servidor de back-end o suporte de outra forma, se for acessado diretamente.
thomasrutter
3
Eu uso proxies reversos nginx para sites não locais em conexões lentas, para que o HTTP / 2 me ajude. É uma pena que os desenvolvedores do nginx não tenham considerado esse caso de uso :-(.
markshep
5

Infelizmente, o nginx não suporta proxy para um servidor de back-end http / 2, referenciado em https://www.nginx.com/blog/http2-module-nginx/#QandA

P: Você também suportará HTTP / 2 no lado upstream ou apenas suportará HTTP / 2 no lado do cliente?

R: No momento, apoiamos apenas HTTP / 2 no lado do cliente. Você não pode configurar o HTTP / 2 com proxy_pass. [Editor - Na versão original desta postagem, esta frase foi transcrita incorretamente como "Você pode configurar o HTTP / 2 com proxy_pass". Pedimos desculpas por qualquer confusão que isso possa ter causado.]

Mas qual é o sentido do HTTP / 2 no lado de back-end? Porque, como você pode ver nos benchmarks, não há muitos benefícios no HTTP / 2 para redes de baixa latência, como conexões upstream.

Além disso, no NGINX, você tem o módulo keepalive e pode configurar um cache de keepalive. O principal benefício de desempenho do HTTP / 2 é eliminar handshakes adicionais, mas se você já fizer isso com um cache de keepalive, não precisará do HTTP / 2 no lado upstream.

tangxinfa
fonte