Partiendo de la publicación anterior a está, intentaré profundizar un poco más sobre el uso del módulo MOD_CACHE haciendo uso de las directivas disponibles.
Más Directivas para controlar HTTP headers
Ademas las directivas que se han explicado en la anterior publicación existen algunas otras directivas bastante interesantes que permiten realizar operaciones muy concretas sobre algunos headers HTTP que suelen ser muy importantes no solo para las aplicaciones web, sino también para el funcionamiento de algunas características propias del servidor web.
CacheIgnoreNoLastMod: Cuando una petición no contiene el header Last-Modified con la ultima fecha de modificación, el comportamiento por defecto de mod_cache consiste en descartar la respuesta de dicha petición como contenido cacheable, esto quiere decir que si un cliente realiza peticiones eliminando ese header (de forma intencional, por ejemplo) el contenido de la respuesta no será cacheado por el servidor, lo que le da un poco de control al cliente sobre el comportamiento que tendrá la cache. En el caso de que este comportamiento no sea el deseado, esta directiva permite especificar que si una petición no tiene dicho header, aun así debe ser considerado como un contenido que se puede cachear por el servidor, en este caso, se utiliza la directiva CacheDefaultExpire para definir la fecha en la que expirará de dicho documento.
CacheIgnoreNoLastMod on |
Evidentemente, si se utiliza esta directiva, es recomendable utilizar también la directiva CacheDefautExpire
CacheIgnoreQueryString: Se trata de una directiva interesante, ya que cuando se encuentra habilitada permite cachear los contenidos de la respuesta independiente de los parámetros que se han enviado como query string. Para comprender este funcionamiento, basta con decir, que cuando se realiza una petición como la siguiente http://misitio.com/recuso.php?param1=1¶m2=2¶m3=3 la respuesta se va a cachear de forma distinta e independiente a la siguiente petición http://misitio.com/recuso.php?param1=1¶m2=2 o la siguiente petición: http://misitio.com/recuso.php?param2=2¶m1=1¶m3=3 esto que significa? Que aunque se trate del mismo recurso, la especificación RFC 2616 define que se deben de cachear en segmentos de almacenamiento distintos, cuando esta directiva se encuentra habilitada, desde el punto de vista del sistema de cacheo se trata de la misma petición e ignora los query string.
CacheIgnoreQueryString on |
De esta forma, las tres peticiones anteriores serán cacheadas en el mismo espacio de almacenamiento ya que mod_cache asume que se trata del mismo recurso, independiente del contenido del query string.
CacheIgnoreURLSessionIdentifiers: Cuando una aplicación web utiliza alguna tecnología del lado del servidor como PHP, ASP, ColdFusion, JSP, etc. Normalmente dichos lenguajes tienen un control de sesiones que se basa en identificadores únicos por cada usuario que utiliza la aplicación, en algunas ocasiones, estos identificadores pueden ser “añadidos” a las URL, por ejemplo:
En estos casos, se puede producir un efecto que puede resultar bastante “desagradable” para el administrador del sitio web, cada petición al mismo recurso se va a cachear de forma separada por cada cliente que acceda a dicho recurso, esto quiere decir, que se van a cachear los mismos contenidos N veces (siendo N el número de usuarios que acceden a la aplicación web). Por este motivo existe esta directiva, ya que es posible indicar a Mod_Cache que no intenté almacenar en la cache el mismo contenido N veces cuando se produzca esta situación.
NOTA: Este caso es distinto del que se ha mencionado anteriormente con las peticiones con Query Strings distintos, donde se utilizaba la directiva CacheIgnoreQueryString dado que, como se ha visto anteriormente, no se trata de un query string de la petición, sino que se ha añadido al recurso el identificador de la sesión con el carácter “;” en ningún momento se ha utilizado el carácter “&” por lo tanto no es considerado un query string.
La sintaxis de esta directiva es simple, solamente es necesario establecer un listado de los nombres de identificadores de sesión que se desea ignorar y el módulo realizará el resto.
CacheIgnoreURLSessionIdentifiers jsessionid CacheIgnoreURLSessionIdentifiers PHPSESSIONID CacheIgnoreURLSessionIdentifiers None |
Esta directiva puede aparecer en múltiples puntos del fichero de configuración, sin embargo si su última aparición su valor es None, la lista de identificadores de sesión se limpia, lo que significa que las directivas anteriores pierden su valor.
Directivas en mod_disk_cache y mod_mem_cache
Las directivas que se han explicado anteriormente, son directivas que se encuentran disponibles en el módulo principal de mod_cache, sin embargo, tal como se ha indicado en la publicación anterior, existen algunos sub-modulos que complementan el funcionamiento de mod_cache y que tienen también su propio conjunto de directivas, aunque es mucho más reducido.
CacheRoot (mod_disk_cache): Se trata de la directiva principal en el sub-modulo mod_disk_cache, ya que permite especificar donde se almacenarán los contenidos cacheados. Esta directiva reciben como parámetro, simplemente un directorio donde se deben almacenar los contenidos.
CacheRoot /var/www/cache |
Todo contenido que sea cacheado en disco, se almacenará en /var/www/cache.
CacheDirLevels (mod_disk_cache): Indica el número de niveles de directorios que pueden colgar de la jerarquía definida en la directiva CacheRoot
CacheDirLevels 7 |
Indica que solamente pueden haber un máximo de 7 directorios debajo del directorio /var/www/cache
CacheDirLength (mod_disk_cache): Indica el número de caracteres por cada nombre de subdirectorio localizado bajo la jerarquía de directorios partiendo del valor de la directiva CacheRoot
CacheDirLength 2 |
Indica que solamente pueden haber un máximo de 2 caracteres por sub-directorio, existe una restricción que indica que el producto de los valores de las directivas CacheDirLevels y CacheDirLength no puede superar 20. (CacheDirLevels * CacheDirLength <= 20)
CacheMaxFileSize (mod_disk_cache): Indica el número máximo de bytes puede tener un elemento cacheado. El valor por defecto es de 1000000
CacheMaxFileSize 64000 |
CacheMinFileSize (mod_disk_cache): Indica el número mínimo de bytes puede tener un elemento cacheado. El valor por defecto es de 1
CacheMinFileSize 1 |
MCacheSize: Se trata de una directiva muy importante que determina en gran medida, el funcionamiento de este submódulo, ya que es la encargada de reservar la memoria suficiente para almacenar objetos en la cache, se mide en Kbytes y su valor por defecto, cuando no se especifica esta directiva es 100. En el caso de que se intenté almacenar un nuevo objeto en la cache y dicho objeto sea más grande que el tamaño restante en la cache, el módulo se encargará de eliminar objetos (utilizando el algoritmo adecuado según el valor de la directiva MCacheRemovalAlgorithm) hasta que sea posible almacenarlo.
MCacheSize: 100000 |
Es importante tener en cuenta que la memoria reservada, no puede superar los limites del sistema, ademas debe ser un valor adecuado dependiendo de las condiciones físicas del servidor (mémoria RAM disponible).
MCacheMaxObjectCount (mod_mem_cache): Se trata de una directiva importante para el funcionamiento correcto de mod_mem_cache, permite definir el número máximo de objetos que pueden cachear
MCacheMaxObjectCount 10000 |
El valor por defecto cuando no se especifica un valor para esta directiva es 1009 .
MCacheMaxObjectSize (mod_mem_cache): Tal como su nombre lo indica, permite establecer el tamaño máximo que puede tener un objeto cacheable. El valor por defecto es 10000 bytes.
MCacheMaxObjectSize 6400000 |
MCacheMinObjectSize (mod_mem_cache): Tal como su nombre lo indica, permite establecer el tamaño minimo que puede tener un objeto cacheable. El valor por defecto es 1 byte.
MCacheMinObjectSize 10000 |
MCacheRemovalAlgorithm (mod_mem_cache): Esta directiva permite establecer el algoritmo que se deberá utilizar para eliminar elementos de la cache. Hay solamente dos posibles opciones LRU y GDSF, siendo el segundo el valor por defecto cuando no se usa esta directiva.
LRU (Last Resource Used): El módulo se encarga de eliminar los elementos que no han sido utilizados por mucho tiempo, es decir, aquellos elementos que ya no se usan.
GDSF (GreadyDual Size): Se trata de un algoritmo que se basa en la asignación de prioridades a los elementos cacheados, para determinar la prioridad de un elemento, se tiene en cuenta el costo en términos de almacenamiento, el tamaño del objeto y la cantidad de accesos que se tienen al mismo, siendo este algoritmo el más completo de los dos.
MCacheRemovalAlgorithm LRU MCacheRemovalAlgorithm GDSF |