×
Cómo optimizar WordPress usando Nginx, PHP-FPM, MySQL y Memcached

Cómo optimizar WordPress usando Nginx, PHP-FPM, MySQL y Memcached


Seguramente recordarás que hace algunos días publicábamos algunos consejos para mejorar la velocidad de tu blog WordPress. Los cambios que mencionábamos debían aplicarse principalmente del lado del sitio, pero a continuación les mostraremos algunos cambios y optimizaciones que podemos realizar a nivel del servidor para que nuestro WordPress literalmente vuele de rápido.

Optimizar WordPress usando Nginx, PHP-FPM, MySQL y Memcached

Como indica el título, vamos a utilizar Nginx, PHP-FPM, MySQL y Memcached, en este caso en un servidor CentOS 6.x plano (sin panel de control). Ten en cuenta que necesitarás acceso root al servidor y recuerda además realizar todos los respaldos que creas necesarios antes de comenzar. Comencemos!

Instalación y configuración de Nginx

Nginx es el servidor web que está detrás de los sitios más populares del mundo, es rápido, performante, escalable y ofrece un sin fin de configuraciones que harán que tus sitios vayan más rápido que nunca, además es 100% compatible con WordPress. En Infranetworking lo usamos hace años, y por supuesto no podía faltar en esta guía tampoco.  Comencemos!

-Vamos a confirmar el sistema operativo y arquitectura del server:

cat /etc/redhat-release ; arch

-Ahora descargaremos la versión correspondiente de Nginx, que será nuestro servidor web:

mkdir /root/temp ; cd /root/temp ; wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

-Agregamos el repo:

rpm -i nginx-release-centos-6-0.el6.ngx.noarch.rpm

-Instalamos Nginx:

yum install nginx

Listo, Nginx ya fue instalado en nuestro servidor CentOS. Por supuesto aún falta configurarlo, así que recuerda editar el archivo /etc/nginx/nginx.conf y agrega tu sitio al virtual host en /etc/nginx/conf.d/tupaginaweb.com.conf

Una configuración básica para WordPress es la siguiente:

### tusitioweb.com
server {
 access_log off;
 error_log logs/tusitioweb.com-error_log warn;

listen 80;
server_name tusitioweb.com www.tusitioweb.com;

location ~* \.(gif|jpg|jpeg|png|ico|wmv|3gp|avi|mpg|mpeg|mp4|flv|mp3|mid|js|css|wml|swf)$ {
root /ruta/al/sitio/tusitioweb.com;
 expires max;
 add_header Pragma public;
 add_header Cache-Control "public, must-revalidate, proxy-revalidate";
 }

location / {
 root /ruta/al/sitio/tusitioweb.com;
 index index.php index.html index.htm;

# Rewrite rules de WordPress
try_files $uri $uri/ /index.php?$args;
}

# Pasamos todo PHP a PHP-FPM
 location ~ \.php$ {
 root /ruta/al/sitio/tusitioweb.com;
 try_files $uri =404;
 fastcgi_pass unix:/tmp/php5-fpm.sock;
 fastcgi_index index.php;
 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
 include fastcgi_params;
   }
}

Recuerda cambiar /ruta/al/sitio/tusitioweb.com por la ruta (path) real a tu sitio, y por supuesto el nombre «tusitioweb.com» por el nombre real. También recuerda estudiar detalladamente la documentación de Nginx para encontrar la configuración que mejor se adapte a tu blog, esta es sólo una guía genérica.

 

Instalación y configuración de PHP-FPM

PHP-FPM es un servicio que corre exclusivamente PHP-FASTCGI sin depender de Apache, Nginx u otros servidores, es 100% independiente, escalable y mucho más rápido que sus predecesores. Dependiendo de la versión de PHP que utilices, podrás instalar PHP-FPM desde el repo que viene por defecto en CentOS o bien puede que tengas que usar uno como Epel, Remi, etc.

A la instalación de PHP-FPM le sumaremos algunas librerías comunes:

yum install php-fpm php-mysql php-xcache php-imap php-cli php-devel php-gd php-mbstring php-mcrypt

Los archivos de configuración de PHP-FPM se encuentran en /etc/php-fpm.d/

Esta es una configuración básica de ejemplo:

– En el archivo www.conf añade esta configuración, verás que las variables están entre las primeras líneas:

;listen = 127.0.0.1:9000
 listen = /tmp/php5-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0666

La primer línea comenta el uso de puertos en el 9000, la segunda deja establecido el uso de sockets para conectar a php-fpm, y el resto de las líneas aseguran que Nginx tendrá privilegios suficientes para usar el socket de php-fpm sin problemas.

Asegúrate de que /tmp tenga permisos 1777 además:

chmod 1777 /tmp

Iniciemos los dos servicios que hemos configurado (recuerda desactivar Apache en caso de que esté corriendo):

service nginx start
service php-fpm start
chkconfig nginx on
chkconfig php-fpm on

Para profundizar más en PHP-FPM y su configuración aquí te dejamos el enlace a la documentación del mismo. Ahora es el turno de MySQL!

 

Instalando y configurando MySQL server

-Su instalación es muy sencilla:

yum install mysql mysql-server

Verifiquemos los permisos de /tmp para ver si MySQL puede escribir allí:

chmod 1777 /tmp -v

Ahora inicia MySQL:

service mysqld start
chkconfig mysqld on

Y configura la contraseña de root para el servicio:

/usr/bin/mysqladmin -u root password 'AquiVaLaContraseña'

En /etc/my.cnf podemos aplicar algunas configuraciones que son recomendadas para WordPress:

-En la sección «[mysqld]» configuramos lo siguiente:

# Activar query_cache
 query_cache_limit=2M
 query_cache_size=64M
 query_cache_type=1
# Establecer número máximo de conexiones:
 max_connections=400
# Reducir timeouts
 interactive_timeout=30
 wait_timeout=30
 connect_timeout=10

Si el server tiene más de 4GB de RAM, configura el query_cache_size en 128M en lugar de 64M.

Para tomar los cambios:

service mysqld restart

Por cierto, hay que añadir la base de datos para WordPress. Vamos a ingresar a la consola de MySQL:

mysql -u root -p

Ahora debes introducir la contraseña de root de MySQL que elegiste antes.
Posteriormente creamos la base de datos:

create database basededatos;

Asignamos usuario y contraseña:

GRANT ALL PRIVILEGES ON basededatos.* TO 'elusuario'@'localhost' IDENTIFIED BY 'elpassword';
flush privileges;

Salimos de la consola de MySQL:

exit;

Obviamente, reemplaza estos datos por los datos reales que vayas a usar en tu base de datos, usuario y password. Ahora instalaremos el gran componente restante, Memcached.

 

Instalar Memcached

Memcached es un sistema de cache basado en memoria, que permite a nuestro WordPress reducir el consumo de base de datos casi al mínimo. Vamos a ver el procedimiento de instalación ahora.

-Añadimos el repositorio de Epel:

cd /root/temp
wget http://epel.gtdinternet.com/6/x86_64/epel-release-6-8.noarch.rpm
rpm -i epel-release-6-8.noarch.rpm

Instalamos Memcached y el módulo «memcache»:

yum install memcached
pecl install memcache

Vamos a añadirlo a PHP:

nano -w /etc/php.ini

Agregamos la siguiente línea al final:

extension=memcache.so

Para tomar cambios reiniciamos PHP-FPM:

service php-fpm restart

Es posible que PHP haya añadido la extensión de Memcached automáticamente en el archivo /etc/php.d/memcache.ini, así que en ese caso debemos comentarla en php.ini.

Ahora realizaremos una configuración básica de Memcached, dependiendo de cuanta memoria RAM tengas en tu VPS o Servidor Dedicado asignaremos X parte a Memcached, esto se hace subiendo la variable CACHESIZE, en nuestro caso a 512 en el archivo /etc/sysconfig/memcached

Iniciamos el servicio:

service memcached start
chkconfig memcached on

Lo siguiente es instalar WordPress. Puedes hacerlo por el medio que prefieras (FTP, autoinstalador, etc.) pero recuerda instalar la versión más reciente disponible. Una vez WordPress esté listo vamos a instalar el plugin W3 Total Cache. Todo lo referente al mismo puedes verlo en este postLo más importante aquí es que una vez tengas W3TC instalado, lo configures para que use Memcached.

Todo listo, ahora ya tienes el servidor configurado para utilizar WordPress con Nginx, PHP-FPM, MySQL y Memcached, además de W3TC. Si quieres mejorar aún más la velocidad, entonces te recomendamos que en lugar de usar discos duros tradicionales en el server optes por unidades SSD, ya que ayudan a despachar la información mucho más rápido, así ganarás puntos en performance.

¿Te gustó el artículo? Compártelo:

Santiago Borges

Escrito por Santiago Borges

Departamento Técnico VIP, asignado a brindar soporte de forma exclusiva a clientes de alto tráfico y con requerimientos de programación. Además, es un experimentado SysAdmin, que se encargará de que recibas la mejor asistencia ante cualquier problema. Actualmente está cursando estudios de RHCE y posee certificaciones en Inglés por la Universidad de Cambridge. Conoce más sobre él desde su perfil de LinkedIn.

    Recibe en tu correo electrónico toda la información sobre hosting, desarrollo web y dominios

    Términos y Condiciones de Servicio

    Infranetworking Internacional - Copyright 2002-2024
    Todos los derechos reservados.