Permalinks de wordpress y su matriomonio con NGINX

Tienes un blog de éxito, como el de la foto, pero de vez en cuando, los usuarios se te quejan de una extraña lentitud. Reclamas a tu proveedor de hosting, y efectivamente te confirma que si tuvieras contratada la siguiente tarifa, esos problemas desaparecerían. Tienes dos opciones una fácil y otra divertida. La primera es pagar mas y ver si tiene razón el tipo del hosting, y la otra es coger los trastos y migrar el blog.

DSLab

Todo parece muy sencillo, una web, una base de datos, copiar pegar y listo. Bueno si, eso hay que hacerlo, pero además hay que hacer unas cuantas cosas más. En próximos posts explicaremos paso a paso como migrar tu blog de tudominio.wordpress.com a un hosting, con tu propio dominio, y no el que ofrece wordpress.com de manera no tan «gratuita».

Hoy lo que nos ocupa es algo mas friki. En nuestro último proyecto, hemos migrado un budypress a la máquina del cliente, dado que han considerado que es mejor así, en lugar de depender de terceros que te racanean servicios por dinero. Nuestra aventura nos ha enseñado mucho.

Nos propusimos montar un servidor virtual Ubuntu, con un gestor de base de datos MySQL, y en lugar del típico apache, que está hiper-trillado y mega documentado, decidimos complicarnos la existencia utilizando un servidor web NGINX. En entradas anteriores os hemos contado como montar un LEMMPP, cuyo servidor web es NGINX, y en próximas entregas también haremos un monográfico de este «endiablado» servidor web.

lempp

Bueno, al tema, que nos vamos por las ramas. Nuestro problema cuando teníamos migrada la base de datos y los ficheros de WordPress, fue que aunque todo casaba a la perfección, no estábamos viendo aquellas url que genera wordpress a través de su código, y que generamos con los llamados permalinks.

La situación era extraña. Accediamos a cualquier carpeta como por ejemplo la famosa wp-admin, sin problemas. Incluso nos mostraba la página de inicio. Pero si desde ella queríamos acceder a un post, un foro, o la actividad de los miembros de buddypress, ¡Naranjas! Nos sacaba un error 404 como un castillo. Era claro que algo no casaba entre Nginx y wordpress.

404 nginx

Al final tras mucho googlear y leer en otros blogs encontramos la solución explicada en un fantástico inglés en este blog.

Para quien no sepa mucho inglés, ahí va mi traducción al texto del maestro  Soumik Ghosh:

WordPress generalmente funciona «fuera de la caja» con nginx. Los post se cargan bien, las funciones en el panel de trabajo bastante bien, hasta llegar a los permalinks. Si estas en Apache con mod_rewrite, WordPress agrega automáticamente las reglas de reescritura necesarias en el archivo.htaccess. Para que los enlaces permanentes funcionen. Pero para nginx, hay que añadir las reglas manualmente.

Por otra parte, cuando WordPress detecta que  mod_rewrite no está cargado (que es el caso con nginx), se vuelve a utilizar enlaces permanentes PathInfo, que inserta un ‘index.php’ extra en la parte delantera. Esto no ha sido un gran problema para mí, ya que he estado usando la opción de estructura personalizada para eliminar el index.php. Que me ha funcionado muy bien . (Captura de pantalla más abajo)

nginx_wordpress_permalinks

Aparte de eso, también tendrás que editar el archivo de configuración de nginx para hacer el trabajo de los permalinks. Vamos a utilizar la directiva try_files (disponible en nginx 0.7.27 +) para pasar URLs a index.php de WordPress para que sean manejados internamente. Esto también funciona para solicitudes 404 .

Si tu blog está en la raíz del dominio (algo así como http://www.myblog.com), encontrar el bloque location / dentro del archivo de configuración y añada la siguiente línea a la misma.

try_files $uri $uri/ /index.php?q=$uri&$args;

Aquí, Nginx chequea la existencia de un fichero en la URL ($uri), después en un directorio ($uri/). Si no la encuentra ni en el directorio ni en el fichero, entonces  se realiza una redirección interna a / index.php pasando la URL como pathinfo.

Debe quedar algo parecido a esto tras las modificaciones:

location / {
    index index.php index.html index.htm;
    try_files $uri $uri/ /index.php?q=$uri&$args;
}

Si tu blog se encuentra en un subdirectorio, llamado por ejemplo /blog debes añadir una location extra llamada location /blog/ , con el siguiente código:

location /blog/ {
    try_files $uri $uri/ /blog/index.php?q=$uri&$args;
}

Por último tras los cambios reinicia el nginx con el siguiente comando.

nginx -s reload

Los bonitos permalinks de wordpress deberían funcionar ahora.

Si consideras este post de ayuda, considera hacer una donación:making a donation.

Hasta aquí la inestimable ayuda del amigo Soumik. Dejo el link de hacer una donación, por que cuando la otra tarde he conseguido arreglar el problema casi lloro, de la emoción.

En nuestra búsqueda, encontramos otras páginas, pero nos quedamos con la citada, por su manera de dar en el clavo, tras aplicarlo en nuestro caso, lo demás fue coser y cantar.

Aquí os dejamos las otras webs que hablan sobre el tema:

Ayuda oficial de wordpress. http://codex.wordpress.org/Using_Permalinks

Ayuda incompleta de wordpress para permalinks con nginx: http://codex.wordpress.org/Nginx

Para los muy torpes como es mi caso existe un plugin: http://wordpress.org/plugins/nginx-helper/

Como siempre os digo, compartid vuestra experiencia en los comentarios. Así aprenderemos todos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*