Utilice HTTP / 2.0 entre nginx reverse-proxy y el servidor web de fondo

19

Utilizo nginx como un proxy ssl inverso frente a un servidor web de fondo que es capaz de hacer HTTP / 2.0.

Noté que nginx envía las solicitudes al servidor de fondo a través de HTTP / 1.1 en lugar de HTTP / 2.0. ¿Es posible decirle a nginx que use una conexión HTTP / 2.0 sin cifrar? ¿Aumentaría esto el rendimiento?

S1lentSt0rm
fuente
aunque las especificaciones http2 dicen que no requiere cifrado, nginx actualmente no es compatible con http2 sin ssl.
Marco
¿Entonces usaría HTTP / 2.0 si hubiera especificado una dirección https: //? Bueno, entonces supongo que es mejor usar HTTP / 1.1. No tiene sentido cifrar el tráfico dos veces y el rendimiento de HTTP / 2.0 con SSL probablemente no sería tan bueno como HTTP / 1.1 sin SSL, ¿verdad? Quiero decir, eso hace que el proxy reverse-ssl sea inútil;)
S1lentSt0rm
Realmente no importa si encripta el tráfico entre el servidor frontal y el servidor de fondo si están en la misma máquina. en cuanto a rendimiento: http2 es bastante más rápido que http1.1, incluso con cifrado. No puedo decir sin intentar si marcaría la diferencia.
Marco

Respuestas:

21

Encontré esto: https://trac.nginx.org/nginx/ticket/923

No hay planes para implementar soporte HTTP / 2 en el módulo proxy en el futuro previsible

Extracto de un correo referenciado en el ticket:

Casi no tiene sentido implementarlo, ya que el principal beneficio de HTTP / 2 es que permite multiplexar muchas solicitudes dentro de una sola conexión, eliminando así [casi] el límite en el número de solicitudes simultáneas, y no existe tal límite cuando se habla con tus propios backends Además, las cosas pueden empeorar cuando se usa HTTP / 2 para backends, debido a que se usa una conexión TCP única en lugar de múltiples.

S1lentSt0rm
fuente
99
Parece que esto significa que no puede usar HTTP / 2 Server Push si está proxy con nginx, incluso si el servidor de fondo lo admitiría si se accediera directamente.
thomasrutter
3
Utilizo proxies inversos nginx para sitios no locales a través de conexiones lentas, por lo que HTTP / 2 me ayudaría. Es una pena que los desarrolladores de nginx no hayan considerado ese caso de uso :-(.
markshep
5

Lamentablemente, nginx no admite proxy para un servidor back-end http / 2, referenciado en https://www.nginx.com/blog/http2-module-nginx/#QandA

P: ¿También admitirá HTTP / 2 en el lado ascendente o solo admitirá HTTP / 2 en el lado del cliente?

R: Por el momento, solo admitimos HTTP / 2 en el lado del cliente. No puede configurar HTTP / 2 con proxy_pass. [Editor: en la versión original de esta publicación, esta oración se transcribió incorrectamente como "Puede configurar HTTP / 2 con proxy_pass". Nos disculpamos por cualquier confusión que esto pueda haber causado.]

Pero, ¿cuál es el punto de HTTP / 2 en el lado del backend? Porque, como puede ver en los puntos de referencia, no hay muchos beneficios en HTTP / 2 para redes de baja latencia, como las conexiones ascendentes.

Además, en NGINX tiene el módulo keepalive y puede configurar un caché keepalive. El principal beneficio de rendimiento de HTTP / 2 es eliminar los apretones de manos adicionales, pero si ya lo hace con un caché de keepalive, no necesita HTTP / 2 en el lado ascendente.

tangxinfa
fuente