Cómo instalar WordPress usando Nginx como servidor web


Nginx, es un servidor web y proxy inverso ligero multiplataforma, que en los últimos tiempos ha subido exponencialmente su cuota de mercado, superando por ejemplo a Microsoft Information Services. Nginx es software libre y con licencia BSD

Algunas de las ventajas por las que ha crecido su uso es:

  • Es multiplataforma.
  • Es más ligero que otros servidores web, perfecto para mejorar el rendimiento.
  • Se puede integrar con Apache y hacer por ejemplo que Nginx sirva el contenido estático y Apache el dinámico
  • Utilizarlo como balanceador de carga.
  • Es compatible con la mayoría de CMS y en éste post veremos como configurarlo para servir un WordPress.

Para empezar lo que haremos es instalarlo, con el siguiente comando:

$ sudo apt-get install nginx

Una vez instalado, tenemos que arrancarlo, para ello:

$ sudo service nginx start

Si todo ha ido bien, abrimos un navegador y vamos a la página localhost, nos saldrá el mensaje de “Wellcome to nginx!

Ahora vamos a instalar la base de datos, en este caso MySQL, con los siguientes comandos:

$ sudo apt-get install mysql-server php5-mysql

$sudo /usr/bin/mysql_secure_istallation

Llegados a este punto, lo que vamos a hacer ahora es instalar PHP, para ello ejecutamos el siguiente comando:

$ sudo apt-get install php5-fpm

Vamos ahora a configurar PHP, para ello hay que hacer un par de modificaciones en los ficheros php.ini y www.conf para que nginx y WordPress puedan funcionar correctamente.

Lo primero vamos a editar el fichero php.ini y lo que vamos a hacer es cambiar el valor del parámetro cgi.fix_pathinfo a 0. Por defecto está comentado, por lo que también vamos a descomentarlo. Tenemos que ejecutar lo siguiente:

$ sudo gedit /etc/php5/fpm/php.ini

Buscamos la línea donde aparece el parámetro cgi.fix_pathinfo y lo dejamos así:

cgi.fix_pathinfo=0

Ahora vamos a cambiar la configuración del fichero www.conf:

$ sudo gedit /etc/php5/fpm/pool.d/www.conf

Y en el parámetro listen, tenemos que asegurarnos que aparece así:

listen = /var/run/php5-fpm.sock

Guardamos y reiniciamos php:

$ sudo service php5-fpm restart

En este punto lo que vamos a hacer ahora es configurar nginx, para ello abrimos y editamos el fichero de host virtual:

$ sudo gedit /ect/nginx/sites-available/default

y hacemos las siguientes modificaciones:

error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
location ~ \.php$ {
 #    fastcgi_split_path_info ^(.+\.php)(/.+)$;
 #
 # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
 # With php5-cgi alone:
 #fastcgi_pass 127.0.0.1:9000;     #
 # With php5-fpm:
 fastcgi_pass unix:/var/run/php5-fpm.sock; 
 fastcgi_index index.php; 
 include fastcgi_params;
 }

Vamos a ver si llegados a este punto todo funciona, para ellos nos vamos a crear el archivo de configuración de php:

$ sudo gedit /usr/share/nginx/html/info.php

Le añadimos las siguientes líneas:

<?php phpinfo(); ?>

Guardamos el fichero y reiniciamos nginx

$ sudo service nginx restart

Si ahora tecleasemos http://localhost/info.php, nos tendría que salir la pantalla de información de php. Perfecto! Ahora vamos a instalar y configurar WordPress para que funcione con éste servidor nginx.

Empezamos descargando y descomprimiendo la ultima versión de WordPress:

$ wget http://wordpress.org/latest.tar.gz

$ tar -xvf latest.tar.gz

Vamos a crearnos ahora la base de datos y el usuario donde WordPress instalará sus tablas:

$ mysql -u root -p

msyql> create database wordpress;
mysql> create user dani@localhost identified by '*****';
mysql> grant all privileges on wordpress.* to dani@localhost identified by '*****';
mysql> flush privileges;
mysql> exit;

Ahora lo que vamos a hacer es instalarnos unas librerías adicionales de php que necesitamos instalar con WordPress:

$ sudo apt-get install php5-gd libssh2-php;

Ahora nos vamos a crear el fichero de configuración de WordPress, por lo que nos creamos el fichero wp-config.php y añadimos los siguientes ficheros:

$ sudo cp -a wp-config-sample.php wp-config.php

$ sudo gedit wp-config.php

Añadimos al fichero, el usuario, el nombre de la base de datos y su contraseña:

// ** MySQL settings - You can get this info from your web host ** //
 /** The name of the database for WordPress */
 define('DB_NAME', 'wordpress');
/** MySQL database username */
 define('DB_USER', 'dani');
/** MySQL database password */
 define('DB_PASSWORD', '******');

Por defecto en nginx el documento root se encuentra en /usr/share/nginx/html pero lo que vamos a hacer es crearnos una carpeta en /var/www y lo que haremos es transferir los documentos de la instalación de WordPress a esta nueva carpeta mediante rsync

$ sudo mkdir -p /var/www/html

$ sudo rsync -avP ~/wordpress /var/www/html

Ahora nos posicionamos en esta nueva carpeta y cambiamos los permisos y al grupo www-data

$ cd /var/www/html

$ sudo chown www-data:www-data /var/www/html

Vamos a crear la carpeta de uploads para los usuarios de WordPress:

$ mkdir /wp-content/uploads

$ sudo chown -R www-data:www-data /var/www/html/wp-content/uploads

Ahora lo que vamos a hacer es configurar nginx para que use bien WordPress y todo funcione correctamente, para ello configuramos el server block:

$ sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/wordpress

Vamos a editar ese fichero y añadir una serie de cambios:

$ sudo gedit /etc/nginx/sites-available/wordpress

server {
 listen 80 default_server;
 listen [::]:80 default_server ipv6only=on;
root /var/www/html;
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
 #
 location ~ \.php$ {
    try_files $uri =404;
 fastcgi_split_path_info ^(.+\.php)(/.+)$;
 #    # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini

 

Guardamos y lo que vamos a hacer ahora es linkar nuestro nuevo archivo en sites-enabled para activar:

$ sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled

Borramos el archivo default del sites-enabled y reseteamos tanto el servidor como php:

$ sudo rm -r /etc/nginx/sites-enabled/default

$ sudo service nginx restart;

$ sudo service php5-fpm restart;

Y voilá, ahora cuando entremos en localhost, aparecerá la pantalla de instalación de WordPress.

Instalar WP con Nginx como servidor web

Rellenamos los campos y ya tenemos nuestro WordPress funcionando con nginx como servidor web.

WordPress con nginx

Existen miles de configuraciones más avanzadas para nginx, pero siguiendo estos pasos podríamos tener nuestro WordPress corriendo con nginx como servidor web.

Hay 3 comentarios

Añade el tuyo
  1. 1
    Alfonso Correas

    Buen escrito. A partir de ahí habría que empezar a pensar en algo mas que sencillamente funcionara. Habría que empezar a pensar en seguridad o esa instalación de WP duraría muy poco.

    Asi a bote pronto, necesitaríamos denegar cualquier petición hecha al wp-config.php, ya que no nos interesa que cualquiera pueda solicitarlo y saber nuestros datos de configuración.

    location = /wp-config.php {
    deny all;
    }

    Requeriríamos de mas configuración en función de como configuremos WordPress. Quizás lo mejor es instalar W3 Total Cache el cual te va ‘soplando’ la configuración de Nginx en función de lo que activemos.

    • 2
      Dani Reguera Bakhache

      Hola Alfonso, gracias por el comentario, tienes toda la razón, pero en sí es solo un pequeño how-to muy básico de como podemos instalar nginx con WordPress y que funcione.
      Como digo al final del post, hay configuraciones más avanzadas que habría que hacer para que todo fuese óptimo.

Hay 1 comentario