Mantener la conexión SSL activa entre el proxy inverso y el servidor backend
Tengo un servidor de fondo (Apache) que está demasiado lejos de la mayoría de nuestros usuarios, por lo que nuestra idea es implementar un proxy inverso más cercano que actuará como caché.
A primera vista funcionó de maravilla. Los archivos estáticos almacenados en caché se sirven extremadamente rápido, pero para cualquier otra cosa, el proxy inverso (NGINX) necesita conectarse al servidor back-end, lo que lleva algún tiempo para el protocolo de enlace SSL, lo que hace que estas primeras solicitudes sean lentas.
Estaba buscando información sobre esto, pero no pude encontrar una manera de mantener esta conexión. ¿Hay alguna forma de hacerlo?
Incluso intenté aprender más sobre los websockets, pero todas las implementaciones que pude encontrar fueron para responder a una solicitud específica, no para mantener la conexión entre ambos servidores web (NGINX en el proxy inverso y Apache en el back-end).
¿Alguno de ustedes tiene alguna idea o consejo sobre qué estudiar / usar / buscar para lograr eso?
¡Muchas gracias de antemano!
Respuestas
En nginx solo puede especificar keepaliveuna conexión ascendente si la conexión está definida en un upstreambloque. Por ejemplo:
upstream backend {
server private-api.example.com:443;
keepalive 32;
}
Aquí, keepalive
especifica el número máximo de conexiones abiertas simultáneas a los servidores ascendentes por proceso de trabajo .
Para usar el upstream, debe especificar su nombre en su en proxy_pass
lugar de la dirección de backend.
Por ejemplo, si utilizó anteriormente:
proxy_pass https://private-api.example.com:443;
Lo cambiarías a:
proxy_pass https://backend;
Sustituya literalmente el nombre del upstream por el definido server
.
También debe establecer la versión HTTP en 1.1 (porque es absurdamente predeterminado 1.0) y borrar el encabezado de Conexión:
proxy_http_version 1.1;
proxy_set_header Connection "";
Tenga en cuenta que también hay un keepalive_timeout
que puede definir en el upstream
que puede necesitar sintonizar. De forma predeterminada, es de 60 segundos, por lo que si una conexión está inactiva durante ese tiempo, se cerrará, incluso si hay menos de las keepalive
conexiones abiertas. El servidor backend tendrá su propio tiempo de espera activo que también necesitará ajustar por separado.