0

Instalar Varnish (Caché) y Apache con Certificado SSL en Ubuntu

Varnish es un acelerador de servidores web, también conocido como caché de proxy HTTP inversa. Se instala delante de cualquier servidor HTTP (apache, Ngnix, etc.) y se configura para almacenar en el caché del servidor una copia del recurso solicitado. Está pensado para aumentar el rendimiento de aplicaciones web con contenidos pesados y APIs de gran consumo.

En esta guía, veremos el uso de Apache2 con SSL y servidor de web con Varnish como servidor de almacenamiento en caché.

Además, exploraremos dos configuraciones de sitios web:

  1. HTTP y HTTPS.
  2. Solo HTTPS.

Operaciones Comunes

Antes de que podamos comenzar a configurar Apache y Varnish para cualquiera de las configuraciones, es necesario instalarlos y habilitar algunos módulos de Apache.

En primer lugar, instale Apache y Varnish:

apt-get update
apt-get upgrade
apt-get install varnish apache2

A continuación, cargue todos los módulos necesarios de Apache:

a2enmod ssl
a2enmod proxy
a2enmod proxy_balancer
a2enmod proxy_http

Y reiniciar:

systemctl restart apache2.service

HTTPS y HTTP

Esta configuración tendrá un Apache VirtualHost escuchando en la IP externa para conexiones HTTPS y otro VirtualHost escuchando en localhost para las solicitudes de contenido de Varnish.

Además, Varnish aceptará las solicitudes HTTP en las direcciones IP externas e internas y, por lo tanto, se encargará del lado HTTP.

La estructura será más fácil de entender con el siguiente diagrama:

como se verá en la imagen, toda solicitud al servidor pasa por Varnish, en el caso del apache(443) funciona como una caja de paso temporal y luego llegará a Varnish (caché) luego a apache core (8080)

Primero configuraremos Apache para que escuche las solicitudes HTTPS externas y las solicitudes HTTP internas mediante la creación de dos archivos VirtualHost.

El primer archivo que crearemos aceptará las conexiones HTTPS externas y luego entregará las solicitudes a Varnish. Llamaremos a este archivo VirtualHost external-https.confy se verá así:

<VirtualHost *:443>
        ServerName            example.com
        ErrorLog              /var/log/apache2/external-https_error.log
        CustomLog             /var/log/apache2/external-https_access.log combined

        SSLCertificateFile    /etc/ssl/example.com.crt
        SSLCertificateKeyFile /etc/ssl/example.com.key

        ProxyPreserveHost       On
        ProxyPass               / http://127.0.0.1:80/
        ProxyPassReverse        / http://127.0.0.1:80/
</VirtualHost>

La primera parte del archivo VirtualHost es absolutamente normal, excepto que no aparece en la DocumentRootlista. Esto se debe al segundo bloque que establece las directivas de Proxy . Estas directivas indican a Apache que dirija las solicitudes de página entrantes a 127.0.0.1:8080(Varnish) y también acepte las respuestas desde la misma ubicación en lugar de servir el contenido directamente.

El próximo archivo VirtualHost será el que configure Apache para aceptar solicitudes HTTP y para entregar el contenido del sitio a Varnish. Este archivo lo llamaremos internal-http.confy se parece a:

<VirtualHost 127.0.0.1:8080>
        ServerName    example.com
        DocumentRoot  /var/www/html
        ErrorLog      /var/log/apache2/internal-http_error.log
        CustomLog     /var/log/apache2/internal-http_access.log combined
</VirtualHost>

La configuración final de Apache es detener la escucha de Apache en el puerto 80 y habilitar el puerto 8080. Esto se hace editando /etc/apache2/ports.conf. Edite la siguiente línea:

Listen 80

Comentar y escribir:

# Listen 80
Listen 127.0.0.1:8080

Finalmente, los dos nuevos archivos VirtualHost necesitan habilitarse. Esto se hace usando el a2ensitecomando con el nombre del archivo VirtualHost sin la extensión .conf. El comando para habilitar los dos archivos enumerados anteriormente se ve así:

a2ensite external-https
a2ensite internal-http

Eso completa la configuración de Apache. Ahora necesitamos configurar Varnish.

El primer archivo que debe editarse es el archivo de la systemdunidad, ya que este archivo establece el puerto en el que escuchará Varnish. El archivo se puede encontrar en /lib/systemd/system/varnish.service. Necesitas editar la siguiente línea:

ExecStart=/usr/sbin/varnishd -j unix,user=vcache -F -a :80-T localhost:6082 -f /etc/varnish/default.vcl -S /etc/varnish/secret -s malloc,256m

Tenga en cuenta que la parte final malloc,256mestablece la cantidad máxima de memoria que Varnish puede usar. Si está en un servidor pequeño, debe reducir esta cantidad.

Cuando haya realizado este cambio, systemd necesita actualizarse con el siguiente comando:

systemctl daemon-reload

El valor predeterminado de Varnish es dirigir las solicitudes de contenido a 127.0.0.1:8080las que ya hemos configurado Apache para escuchar, por lo que no es necesaria una configuración adicional de Varnish.

Apache y Varnish se (re)inician con los siguientes comandos:

systemctl restart apache2
systemctl restart varnish

Ahora todo debería estar funcionando. La sección final de esta guía cubre la prueba de la configuración para comprobar que todo funciona correctamente.

Pruebas y resolución de problemas

En primer lugar, abra varios terminales nuevos al servidor. Los usaremos para monitorear los archivos de registro de Varnish y Apache y ejecutar comandos.

En la primera terminal, ejecute el comando ‘varnishlog’ para imprimir la información de registro de Varnish en la terminal

varnishlog

No se imprimirá nada hasta que Varnish procese una solicitud.

En otro terminal, cambie al directorio de registro de Apache y siga los registros de acceso de VirtualHost interno y externo:

cd /var/log/apache2
tail -f external-https_access.log -f internal-http_access.log

Ahora necesitamos hacer algunas solicitudes por HTTP y HTTPS. Un navegador no es la mejor herramienta para este trabajo, ya que tienden a preferir HTTPS y, a menudo, realizarán una solicitud HTTPS incluso cuando ingrese la URL HTTP. También intentarán almacenar en caché el contenido y, en general, tratarán de ser inteligentes con las cosas que no es lo que necesitamos aquí.

En cambio, vamos a usar curlwhich solo hará exactamente lo que le digamos. Curl tiene la ventaja adicional de imprimir información útil adicional cuando -vse usa la bandera.

En primer lugar, probaremos el servidor configurado con HTTP y HTTPS realizando una solicitud HTTP. Desde otra terminal usa el siguiente comando para solicitar la versión HTTP del sitio:

curl -v http://example.com
curl -v https://example.com

Finalmente, intente visitar el sitio en su navegador, usando HTTPS y HTTP y monitoreando todos los archivos de registro para asegurarse de que todo funcione correctamente.

calivent

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *