Recibe actualizaciones por: rss | twitter | email

Acelera Wordpress con Nginx

Escrito por:
Fecha: 2015-05-01 10:05:00 00:00

Soy de las personas que no me gusta mucho cambiar Wordpress con plugins, por un tema de seguridad, Wordpress es mantenido por Automatic, una compañía grande que actúa en general rápido cuando se detectan fallos de seguridad. Este no es el caso con los plugins, pues en este caso quienes han creado dichos plugins estan a cargo de mantenerlos seguros, y esto puede que no suceda y lo peor es que uno no se entera hasta que es demasiado tarde. Por ello y por que algunos plugins hacen más lento Wordpress es que prefiero no utilizarlos.

En el pasado he utilizado Varnish y Nginx para acelerar Wordpress sin tener la necesidad de utilizar plugins, ultimamente lo hago más con Nginx que con Varnish, veamos como es que configuro normalmente un sitio Wordpress en Nginx.

Nginx cache para Wordpress

Nginx es de por sí muy eficiente y rápido, al utilizar un programa externo para ejecutar el código PHP todos archivos que no requieren de PHP se servirán de manera muy eficiente directamente por Nginx.

Pero en caso de las páginas PHP deberán ser interpretadas una por una y esto dependiendo de la carga del servidor, puede hacerle colapsar, y sabemos que Wordpress en general presenta la misma página una y otra vez a todos los visitantes (al menos la mayoría de los sitios), entonces lo que la mayoría de los plugins de cache lo que hacen es guardar por un determinado tiempo una copia estática de la página vista por un usuario y la sirve al siguiente visitante hasta que expira, entonces crea una nueva copia para los siguientes visitantes.

La verdad si tienes Nginx, no necesitas ningun plugin para hacer aquello, Nginx puede hacerlo directamente. Veamos como:

Lo primero es crear una zona de cache, veamos el archivo /etc/nginx/nginx.conf

user www-data;
worker_processes 4;
pid /run/nginx.pid;

events {
worker_connections 768;
 on;
}

http {

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable "msie6";
client_max_body_size 20m;

fastcgi_cache_path /var/cache/nginx/blog.detecnologia.org levels=1:2 keys_zone=dos:10m max_size=1024m inactive=1h;
proxy_cache_path /var/cache/nginx/www.garron.me levels=1:2 keys_zone=tres:10m max_size=1024m inactive=1h;

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}

La lína importante en este caso es: fastcgi_cache_path /var/cache/nginx/blog.detecnologia.org levels=1:2 keys_zone=dos:10m max_size=1024m inactive=1h;

Esta línea crea una zona de cache para las respuestas de fastcgi, es decir del interprete de PHP, en nuestro caso PHP-FPM. Veamos ahora el archivo de configuración del sitio virtual.

server {
listen 80;

root /var/www/blog.detecnologia.org/public_html;
index index.html index.htm index.php;

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

server_name blog.detecnologia.org;

location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_cache  dos;
fastcgi_cache_key $scheme$host$request_uri$request_method;
fastcgi_cache_valid 200 301 302 5s;
fastcgi_cache_use_stale updating error timeout invalid_header http_500;
fastcgi_pass_header Set-Cookie;
fastcgi_pass_header Cookie;
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
fastcgi_index index.php;
add_header X-Cache $upstream_cache_status;
}

La línea que puede interesarte cambiar es: fastcgi_cache_valid 200 301 302 5s;, lo que esta línea indica es que las respuestas con código 200, 301 y 302 deben ser servidas desde el cache, y que son válidas por 5 segundos, el objetivo de poner un tiempo de duración tan corto es hacer que el usuario tenga una página fresca en la medida de lo posible, pero que el interprete PHP solo vea solo un requirimiento cada 5 segundos, esto le da tiempo para respirar.

Claro que puedes cambiar ese parametro para 5m o 6h (cinco minutos o sies horas) o a lo que creas conveniente para tu sitio.

Como puede verse, si tienes un VPS, no son necesarios los plugins de cache, y nada mejor que trabajar a nivel de Web server, ahorras recursos y tu sitio esta más seguro.