Instalar Nginx y PHP en GNU/Linux Ubuntu 10.04

Introducción.

Desde hace un tiempo había decidido probar otros servidores de páginas diferentes de Apache en busca de uno que consumiera menos recursos, especialmente para la etapa de desarrollo.  Después de una revisión a la oferta de servidores web y a los comentarios encontrados en los foros los mas opcionados son: Nginx, Cherokee y Lighttpd.  En esta ocasión estoy probando al primero de ellos.

Instalar los paquetes necesarios.

$ sudo aptitude install php5-cgi php5-cli php5-common php5-curl php5-gd php5-json php5-mcrypt php5-sqlite php5-mysql

$ sudo aptitude install spawn-fcgi

$ sudo aptitude install nginx

Crear un directorio para el virtualhost.

En este caso se va a utilizar el sitio web por defecto (default) y se va a ubicar en /home/www/public, los virtualhosts adicionales se crean siguiendo los mismos pasos.

$ sudo mkdir -p /home/www/public

$ sudo mkdir /home/www/logs

$ sudo chown -R www-data:www-data /home/www

Establecer la configuración del virtualhost.

$ sudo vi /etc/nginx/sites-available/default

server {
    listen       80 default;
    server_name  localhost;
    access_log   /home/www/logs/localhost.access.log;

    location / {
        root   /home/www/public;
        index  index.html index.htm;
    }

    location ~ .php$ {
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /home/www/public/$fastcgi_script_name;
        include fastcgi_params;
    }
}

Tenga en cuenta que las rutas asignadas a las variables access_log, root y fastcgi_param se relacionan con los directorios creados en el paso anterior.

Activar el virtualhost.

En este caso se utiliza el sitio por defecto, sin embargo pueden crearse nuevos simplemente utilizando un nombre diferente para el enlace.

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

Crear un recubrimiento para spawn-fcgi.

$ sudo vi /etc/init.d/php-fastcgi

#!/bin/bash
BIND=127.0.0.1:9000
USER=www-data
PHP_FCGI_CHILDREN=5 #15
PHP_FCGI_MAX_REQUESTS=1000

PHP_CGI=/usr/bin/php-cgi
PHP_CGI_NAME=`basename $PHP_CGI`
PHP_CGI_ARGS="- USER=$USER PATH=/usr/bin PHP_FCGI_CHILDREN=$PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS=$PHP_FCGI_MAX_REQUESTS $PHP_CGI -b $BIND"
RETVAL=0

start() {
      echo -n "Starting PHP FastCGI: "
      start-stop-daemon --quiet --start --background --chuid "$USER" --exec /usr/bin/env -- $PHP_CGI_ARGS
      RETVAL=$?
      echo "$PHP_CGI_NAME."
}
stop() {
      echo -n "Stopping PHP FastCGI: "
      killall -q -w -u $USER $PHP_CGI
      RETVAL=$?
      echo "$PHP_CGI_NAME."
}

case "$1" in
    start)
      start
  ;;
    stop)
      stop
  ;;
    restart)
      stop
      start
  ;;
    *)
      echo "Usage: php-fastcgi {start|stop|restart}"
      exit 1
  ;;
esac
exit $RETVAL

$ sudo chmod +x /etc/init.d/php-fastcgi

Iniciar manualmente los servicios.

$ sudo /etc/init.d/nginx start

$ sudo /etc/init.d/php-fastcgi start

Configurar el inicio automático de los servicios (opcional).

$ sudo update-rc.d nginx defaults

$ sudo update-rc.d php-fastcgi defaults

Probar el servicio.

$ vi /home/www/public/test.php

<?php phpinfo(); ?>

Acceder a la página web http://localhost/test.php desde el equipo local.

7 thoughts on “Instalar Nginx y PHP en GNU/Linux Ubuntu 10.04”

  1. Un detalle en la linea
    fastcgi_param SCRIPT_FILENAME /home/www/public$fastcgi_script_name
    Falta “/” public/$fastcgi_script_name

  2. Esta noche lo pruebo a ver que tal, hasta ahora solo he trasteado Apache, habrá que probar otras cosas (según dicen más rápidas)

    Gracias.

  3. en la parte del Activar el virtualhost.
    el comando no hace ninguna intruccion???
    $ sudo /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default

  4. Javier, en ese punto se crea un enlace dinámico para activar el virtualhost. Faltó el comando en la edición del post. Gracias por el comentario.

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

Leave a Reply

Your email address will not be published. Required fields are marked *