Cómo crear una "CDN" para hacer Offloading de recursos en Linux con NGINX

Cómo crear una "CDN" para hacer Offloading de recursos en Linux con NGINX

En este tutorial, te voy a mostrar como crear tu propio servidor CDN para hacer offloading de recursos usando NGINX.

Antes de empezar, me gustaría aclarar algunas cosas. Cuando le digo CDN a esto, no es tal en su totalidad, porque no voy a montar una red de servidores de contenido, va a ser solo un servidor, que lo voy a usar para hacer offloading de recursos Web.

Si repasamos el uso de una CDN, si, efectivamente, se usa para sacarle carga a los WebServer, pero también, para que el contenido esté disponible de manera distribuida. Si tenés visitantes de regiones dispersas, tal vez te va a resultar más barato y fácil contratar un servicio de CDN como el Akamai.

Empecemos

Esta CDN va a correr en Ubuntu Server y vamos por lo sencillo, instalemos NGINX.

apt install nginx -y

Una vez instalado, vamos a generar el archivo de configuración del webserver de esta manera:

vi /etc/nginx/sites-available/cdn.tudominio.com

Esta es la configuración que usé:

server {
  listen       80;
  server_name  cdn.cduser.com; #Acá va la dirección de tu CDN.

  location ~* .(gif|jpg|jpeg|png|wmv|avi|mpg|mpeg|mp4|htm|html|js|css|mp3|swf|ico|flv)$ {
    expires max;
    proxy_set_header  X-Real-IP  $remote_addr;
    proxy_pass http://wordpress.cduser.com; #Acá va la dirección de tu sitio.
    proxy_ignore_headers X-Accel-Expires Expires Cache-Control;
    proxy_store /var/www/cache$uri;
    proxy_store_access user:rw group:rw all:r;
  }
}

Luego, lo que vamos a hacer es un sym link del archivo de configuración.

ln -s /etc/nginx/sites-available/cdn.dominio.com /etc/nginx/sites-enabled/

Por último, creamos una carpeta llamada "cache" que será, la que comience a guardar lo que "mandemos" desde nuestra aplicación web.

mkdir -p /var/www/cache
chmod 755 -R /var/www/cache

Por último, reiniciamos el NGINX y estamos listos con nuestra CDN.

systemctl restart nginx

¿Cómo lo probamos?

Para armar este tutorial, puse otro servidor con Wordpress e instale un plugin llamado CDN Enabler:

CDN Enabler – WordPress CDN Plugin

Luego, en la configuración, especifiqué la dirección de la CDN y las carpetas las cuales quiero mandar a esa CDN, en mi caso era "wp-content" y "wp-includes". También configure que excluya los archivos ".php", estos, siempre los debería procesar la aplicación.

Después de guardar, tengan en cuenta que en la primer visita, puede estar lento porque comienza a hacer esa "descarga" de recursos del Wordpress a la CDN pero luego, terminado eso, veremos que algunos recursos los carga desde el Servidor que hostea la aplicación y otros desde la flamante CDN.

Pueden comprobarlo, en Chrome, abriendo la consola y yendo a la solapa "sources". En mi caso, se ve así:

Para ir cerrando

Como podés ver, no es tan difícil como suena y de esta manera, podemos optimizar la entrega de recursos desde nuestra aplicación Web.

¿Dudas, consultas? Déjame un comentario aquí abajo.