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:
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.