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.
Rellenamos los campos y ya tenemos nuestro WordPress funcionando con nginx como servidor web.
Existen miles de configuraciones más avanzadas para nginx, pero siguiendo estos pasos podríamos tener nuestro WordPress corriendo con nginx como servidor web.