¿Cómo funciona Varnish Cache + NGINX Reverse Proxy?

Publicado: 2022-08-09

En este artículo, analizaremos el proxy inverso NGINX de caché Varnish y cómo puede configurarlo.

Un servidor proxy con énfasis en el almacenamiento en caché de HTTP es Varnish. Está hecho para ser un acelerador HTTP y puede funcionar como un proxy inverso para su servidor web Apache o NGINX. Sitios web con mucho tráfico y alto protagonismo han implementado Varnish.

Tabla de contenido

¿Qué es Varnish Cache?

Para una empresa basada en la web, el caché suele ser la pieza de software más importante. Varnish Cache es un potente motor HTTP de código abierto/proxy HTTP inverso que hace exactamente lo que su nombre indica: almacena en caché (o almacena) una copia de una página web la primera vez que un visitante la ve. Esto puede acelerar un sitio web hasta en un 1000 por ciento. Varnish hace una sola solicitud a su servidor para almacenar en caché la página, después de lo cual maneja cualquier solicitud posterior para la misma página. Esto da como resultado una entrega de contenido increíblemente rápida y una menor demanda de recursos del servidor back-end.

  • Las competencias principales de Varnish son la velocidad y el rendimiento.
  • Ahorro en infraestructura de servidores
  • Escalabilidad: Varnish permite que su sitio satisfaga la demanda independientemente del volumen de visitantes o solicitudes.
  • Protección contra cortes: Varnish sigue brindando información almacenada en caché incluso si su servidor falla.
  • Flexibilidad: el lenguaje de configuración Varnish (VCL) permite la creación de soluciones, reglas y módulos especializados.
  • Experiencia de usuario mejorada

¿Cómo funciona Varnish Cache?

Antes de que lleguen al backend de su servidor web, Varnish procesa todas las solicitudes entrantes. Su caché maneja todo el tráfico web y, de forma predeterminada, se actualiza cada dos minutos.

Varnish Cache Nginx Proxy inverso

Varnish enrutará la solicitud al backend del servidor web y almacenará en caché el resultado, como acabamos de ver en el párrafo de proxy inverso genérico si la solicitud no se almacena en caché.

Una vez que las solicitudes se han almacenado en caché, se colocan en la memoria y luego se pueden recuperar y enviar rápidamente a los clientes. Varnish emplea el lenguaje VCL para expresar configuraciones, políticas de almacenamiento en caché y otras reglas (Lenguaje de configuración de Varnish).

Puede responder a cada solicitud de manera diferente utilizando este idioma y sus variaciones. Por ejemplo, puede dirigir ciertas solicitudes a un servidor específico o indicarle a Varnish que realice una acción diferente según las características de la solicitud entrante o sus resultados.

El material almacenado en caché aún se puede proporcionar incluso cuando el servidor web no está disponible debido a una función integrada llamada sondeo de back-end, que es otra función increíble de Varnish. Varnish continuará brindando contenido en caché durante un período de tiempo conocido como tiempo de gracia si detecta un tiempo de inactividad. El sondeo de back-end consulta el servidor con una frecuencia que puede establecer de forma flexible.

¿Qué es Nginx?

NGINX es un software de código abierto que se puede usar para la transmisión de video, el almacenamiento en caché, los proxies inversos, el servicio web y otras funciones. Originalmente comenzó como un servidor web construido para la máxima velocidad y confiabilidad. NGINX puede funcionar como servidor HTTP, servidor proxy de correo electrónico (IMAP, POP3 y SMTP), proxy inverso y equilibrador de carga para servidores HTTP, TCP y UDP, además de servir como servidor HTTP.

¿Qué es el proxy inverso?

La función principal de un proxy inverso es proteger a los servidores web del tráfico entrante. Cada solicitud de conexión es recibida por un proxy inverso, que la reenvía a través de muchos servidores antes de conectarse al que manejó la solicitud.

Cada operación de proxy inverso tiene tres fases principales:

  1. Recopilación de solicitudes de conexión: en el borde de la red, el proxy inverso acepta solicitudes entrantes.
  2. Protocolo de enlace de tres vías de TCP: se crea una conexión con el proxy inverso después de un protocolo de enlace de tres vías de TCP y se cierra la primera conexión.
  3. Conexión del servidor de origen: utilizando una dirección IP ficticia, el proxy inverso conecta el servidor de origen con la solicitud del cliente.

Los usuarios nunca pueden conectarse directamente a un servidor de origen, ya que todas las conexiones del navegador web a las aplicaciones web siempre se realizan a través de un proxy inverso.

¿Cómo se puede configurar el proxy inverso Varnish caché Nginx?

Instala Nginx en tu servidor

Primero que nada necesitamos instalar Nginx desde el repositorio de Ubuntu usando el comando apt

 sudo apt update apt install nginx -y

Una vez completada la instalación, debemos iniciar y permitir que Nginx se inicie cada vez que se inicie el sistema con el comando systemctl

 systemctl start nginx systemctl enable nginx

Configurar Nginx en el puerto 88

Configuraremos Nginx para usar el puerto HTTP no convencional 8080 para la operación. Para hacer esto, debemos modificar los archivos del host virtual ubicados en el directorio "sitios disponibles".

 nano /etc/nginx/sites-available/default

Cambie el valor de la línea 'escuchar' a 8080. Guarde y salga.

Compruebe si hay errores probando la configuración de Nginx ahora mismo. Reinicie el servicio después de eso.

 nginx -t systemctl restart nginx

Verifique Nginx una vez más usando netstat y confirme que está operando en el puerto HTTP no convencional 8080.

 netstat -plntu

Se ha instalado y el puerto 8080 está siendo utilizado actualmente por el servidor web Nginx.

Instalar barniz en Ubuntu

Tenemos que instalar barniz usando el comando apt

 sudo apt install varnish -y

Usando los comandos systemctl que se enumeran a continuación, inicie Varnish y configúrelo para que comience automáticamente cuando se inicie el sistema.

 systemctl start varnish systemctl enable varnish

De forma predeterminada, Varnish utilizará el puerto 6082 para la interfaz web de administración y el puerto 6081 para el acceso público. Asegúrese de que ciertos puertos estén en la lista usando el comando netstat para verificar.

 netstat -plntu

Se ha instalado el acelerador HTTP Varnish

Configurar Varnish como proxy inverso para Nginx

Como proxy inverso para el servidor web Nginx, se utilizará Varnish. El servidor web Nginx funcionará en el puerto HTTP 8080, mientras que Varnish se ejecutará en el puerto HTTP 80.

En esta fase, configuraremos Varnish para Nginx, identificaremos el servidor backend y modificaremos Varnish para que utilice el puerto HTTP 80 como su puerto predeterminado.

Edite el archivo "default.vcl" yendo al directorio de configuración de barniz de inmediato. y asegúrese de que el host sea 127.0.0.1 y el puerto sea 8080

 nano /etc/varnish/default.vcl

La configuración del backend ha finalizado.

El siguiente paso es configurar Varnish para usar el puerto HTTP 80. Edite el archivo de configuración de Varnish yendo al directorio 'varnish' en el directorio '/etc/default'.

 nano /etc/default/varnish

Asegúrese de que su puerto predeterminado sea 6081 y el puerto HTTP sea 80

El archivo de servicio de barniz en el directorio '/lib/systemd/system' ahora debería estar editado. Edite el archivo varnish.service yendo al directorio del sistema systemd.

 cd /lib/systemd/system nano varnish.service

Reemplace el puerto HTTP 80 con el puerto varnish 6081 en la línea 'ExecStart'.

Ahora recarga la configuración de systemd y reinicia Varnish

 systemctl daemon-reload systemctl restart varnish

Verifique el barniz usando el comando netstat

 netstat -plntu

Se ha completado la configuración de Varnish como proxy inverso para Nginx.

Configurar el cortafuegos UFW

El firewall legible por humanos predeterminado en el sistema operativo Ubuntu se llama "UFW". Use el comando apt que se muestra a continuación para instalarlos si aún no tiene el paquete.

 sudo apt install ufw

Activaremos el firewall y abriremos nuevos puertos SSH, HTTP y HTTPS.

los comandos ufw enumerados a continuación.

 ufw allow ssh ufw allow http ufw allow https

Ahora encienda el firewall y hágalo de tal manera que siempre se inicie en el momento del arranque.

 ufw enable

Ahora que el firewall UFW está activo, se puede acceder a los puertos HTTP y HTTPS desde la red externa.