[ES] – Patterns de URL en la CDN

Patterns de URL en la CDN

La infraestructura de CDN de Planisys utiliza una variante de Nginx especialmente adaptada para alto tráfico y velocidad de acceso al caché sobre memorias NVMe y filesystem ultra-rápido.

Para optimizar la aplicación de reglas de caching, es indispensable conocer cómo se arman los patrones para identificar grupos de URLs, y ésto es a través de “expresiones regulares”.

La especificación de expresiones regulares corresponde a PCRE o Perl-Compatible Regular Expressions, pudiendo encontrar la documentación completa en el sitio pcre.org.

En este tutorial se explicará que expresiones regulares son válidas en Nginx. Podemos añadir expresiones para unos cdn’s en concreto. Clicando sobre uno, iremos a ‘General Configuration‘ allá es donde podremos agregar las expresiones. A continuación en la parte derecha de la ventana, tenemos diferentes partes de configuración, nosotros buscamos ‘Rules‘. Aquí es donde podemos crear diferentes reglas con las expresiones regulares.

Como podemos ver en crear alguna regla tenemos que definir algunas acciones, como por ejemplo la cache, rederict y bypass. Donde dice pattern tenemos que escribir las expresiones.

Expresiones regulares

La expresiones regulares se usan para poder comparar / igualar el texto.
Más adelante hay algunos ejemplo de regex ya hechos. Pero para entender como funciona regex, hay unas reglas básicas a seguir:

  • ^ comparar el principio de la palabra o una nueva línea.
  • . compara cualquier carácter menos los saltos de línea.
  • () agrupar diferentes tokens.
  • |  funciona como un or. Por ejemplo tenemos jpg | png, el valor a comparar tiene que ser uno de ellos, con que uno lo cumple, ya esta bien.
  • \w iguala cualquier palabra.
  • { } se usa para definir valores entra.
  • [ ] define un set de caracteres.
  • $ indica fin de la palabra.
  • * se utiliza para las repeticiones, iguala de 0 a mucho.
  • + igual de 1 a muchos.
  • ? iguala entre 0 y 1 del token anterior.
  • = comparación

Con estas expresiones básicas, ya pueden formar un regex de cualquier tipo.

A continuación se describen ya algunas reglas formadas:

- ^.+.(jpg|jpeg|gif|png|ico|tgz|gz|rar|bz2|doc|exe|ppt|txt|tar|mid|midi|wav|bmp|rtf|swf|woff)$
- (.+)img.aspx(.*)
- jpg
- ^.+.(jpg|jpeg|png|gif)$
- /rss(.*)
- ^.+.(css|js)$
- ^.+.(css|assets|js)$
- ^.+.(js)$
- .+.(txt)$ 
- ^.+.(otf|woff2|woff)$
- /ads.txt$
- ^.+/static/(.*)(css|js|jpeg|gif|png|jpg|svg)$
- /wp-login(.*)
- /wp-admin(.*)
- /_post(.*)
- ^.+.(asp|aspx|php|html)$

Como se puede ver, esos sólo son unos ejemplos recopilados. Pero cada usuario puede formar su regla. Por ejemplo si quiero que solo me compara con el formato txt, el regex será txt.