nginx y plugins de cache

Sin duda nginx es uno de los mejores servidores web existentes hoy en día, pero su configuración ha de hacerse mediante un fichero de configuración que, por norma general, no se puede modificar al vuelo.

Esto significa que cuando se instala un plugin de cache los cambios no se pueden aplicar como en Apache HTTPD u otros mediante el fichero .htaccess, de forma que el plugin no puede hacer los cambios correspondientes para aprovechar la cache.

Al activar el plugin comenzará a almacenar los ficheros en las carpetas correspondientes, por lo que tenemos que hacer que nginx llame a esa cache previo a ejecutar los comandos normales.

Existe un plugin muy simple de cache llamado Simple Cache. Este plugin gestiona la cache y sus cambios y crea una estructura de URL directamente sobre el sistema de ficheros. De esta forma la cache se encuentra en una dirección similar a esta:

/wp-content/cache/simple-cache/example.com/hello-world/index.html

En este caso, se utiliza la carpeta habitual de cache de WordPress, seguido del nombre del plugin y, a continuación, la estructura de la URL.

nginx por defecto ejecuta la siguiente llamada:

location / {
  try_files $uri $uri/ /index.php?$args;
}

Esto significa que analiza las URL, verifica si el fichero existe realmente (y si existe lo devuelve) y, en caso contrario, siempre acaba llamado al index.php. Este funcionamiento es el mismo que hace el código que por defecto se añade al .htaccess.

Para hacer que se intente probar la llamada a la cache primero para ver si ya existe, disponemos de una fórmula sencilla, sumando estos dos elementos previos:

location / {
 try_files "/wp-content/cache/simple-cache/${http_host}{request_uri}index.html" $uri $uri/ /index.php?$args;
}

Este sistema sólo funcionaría en el caso en el que los enlaces permanentes están configurados de la siguiente forma:

/(loquesea)/%postname%/

En la parte inicial se puede configurar lo que se quiera, pero el último parámetro ha de ser el %postname% acabado en barra final.

En caso de que los enlaces permanentes no tengan la barra final, se debería utilizar el siguiente código:

location / {
 try_files "/wp-content/cache/simple-cache/${http_host}{request_uri}/index.html" $uri $uri/ /index.php?$args;
}

Si el plugin, como es el caso, permite activar la opción de Gzip, deberás desactivarlo ya que nginx ya lleva este sistema activado por defecto, por lo que los datos se guardarán planos y nginx ya ejecutará la mejor opción.


Sobre este documento

Este documento está regulado por la licencia EUPL v1.2, publicado en WP SysAdmin y creado por Javier Casares. Por favor, si utilizas este contenido en tu sitio web, tu presentación o cualquier material que distribuyas, recuerda hacer una mención a este sitio o a su autor, y teniendo que poner el material que crees bajo licencia EUPL.