Recibe actualizaciones por: rss | twitter | email

proxy_cache_key

Escrito por:
Fecha: 2014-12-07 20:56:00 00:00

El día de hoy me he quedado nuevamente solo en la ciudad de La Paz, Bolivia, pues mi familia que vino a visitarme por un par de semanas ha regresado a Santa Cruz.

He aprovechado la tarde para estudiar un poco de como trabaja el cache de Nginx. Y me doy cuenta que aún a pesar de lo mucho que me gusta Varnish, me convenzo cada vez más que Nginx es una excelente opción, tal vez un poco menos flexible, pero me atrevo a decir que para el 90% de los casos es más que suficiente.

Bueno, vamos al grano, me he pasado la tarde leyendo sobre:

  • proxy_cache_path
  • proxy_cache_key

proxy_cache_path

Hay suficiente información sobre la mayoría de los parámetros, pero no hay mucha sobre como se debe usar levels. Claro, dice por todos lados que configura los niveles de directorios y subdirectorios a usarse en el folder de cache, pero como se debe definir la óptima configuración, eso no se dice.

Habiendo sacado mis propias conclusiones, creo que cuando te toque configurar levels puedes optar por lo que casi todos hacen:

proxy_cache_path /var/www/nginx_cache levels=1:2

En este caso, levels=1:2 indica que existirán dos niveles de subdirectorios, uno con un solo dígito y el segundo con dos.

Algo así:

/0/00 /0/01 /0/02 ….

De todos modos, ¿cuál usar y por qué?

Debes tomar en cuenta algunos factores:

  • Cantidad de urls individuales tiene tu sitio
  • Tiempo que van a permanecer en el cache

Las dos variables de arriba van a determinar el número de archivos guardados en el cache, mientras más archivos (páginas) a ser guardados en el cache, mejor no tenerlos en un solo directorio y aumentar el nivel de subdirectorios donde Nginx podrá guardar dichos archivos.

Por favor si alguien tiene una mejor explicación déjeme saber.

proxy_cache_key

Esto está un poco mejor documentado, y queda claro que debes elegir estos parámetros basado en tu aplicación y en un par de factores más.

He podido ver que cuando no especifico nada en este parámetro el valor por defecto usado es:

$scheme://$proxy_host$uri

Es decir, si mi variable proxy_pass es: 127.0.0.1:8000 y la página que busco es /index.html, el key será:

http://127.0.0.1:8000/index.html

Esto esta bien, si tengo un solo sitio servido por Nginx usando ese backend, o si cada sitio tiene su propia zona, pero que pasaría si dos sitios comparten la zona (directorio) y ademas el backend. Los visitantes al sitio 2, podrían ver la página del sitio 1.

En este caso, una mejor opción sería:

proxy_cache_key "$scheme://$host$request_uri";

O también:

proxy_cache_key $host$uri$is_args$args;

O incluso:

proxy_cache_key $scheme://$host$uri$is_args$args;
  • scheme: Nos dará el protocolo, http o https, es útil usarlo si tienes ambos funcionando.
  • $host: Nos dará el nombre del server, www.garron.me en mi caso.
  • $uri: Esta está fácil, en nuestro ejemplo de arriba, index.html
  • args: Los argumentos, es decir, v=1.5 por ejemplo en este caso. http://www.garron.me/css/default.css?v=1.5

Debes usar lo necesario para asegurarte que ningún visitante a tu sitio reciba la página de otro visitante.