Nginx Tutorial · 6 min read · Dec 31, 2025

Instalando Nginx Con Soporte PHP5 Y MySQL En Debian Squeeze

Instalando Nginx Con Soporte PHP5 Y MySQL En Debian Squeeze

Versión 1.0
Autor: Falko Timme
Sígueme en Twitter

Nginx (pronunciado “engine x”) es un servidor HTTP gratuito, de código abierto y de alto rendimiento. Nginx es conocido por su estabilidad, rica funcionalidad, configuración simple y bajo consumo de recursos. Este tutorial muestra cómo puedes instalar Nginx en un servidor Debian Squeeze con soporte para PHP5 (a través de FastCGI) y soporte para MySQL.

¡No garantizo que esto funcione para ti!

1 Nota Preliminar

En este tutorial utilizo el nombre de host server1.example.com con la dirección IP 192.168.0.100. Estas configuraciones pueden diferir para ti, así que debes reemplazarlas donde sea apropiado.

2 Instalando MySQL 5

Para instalar MySQL, ejecutamos

apt-get install mysql-server mysql-client

Se te pedirá que proporciones una contraseña para el usuario root de MySQL - esta contraseña es válida para el usuario root@localhost así como para [email protected], por lo que no tenemos que especificar una contraseña de root de MySQL manualmente más adelante:

Nueva contraseña para el usuario “root” de MySQL: <– tucontraseñarootsql
Repetir contraseña para el usuario “root” de MySQL: <– tucontraseñarootsql

3 Instalando Nginx

Nginx está disponible como un paquete para Debian Squeeze que podemos instalar de la siguiente manera:

apt-get install nginx

Inicia nginx después:

/etc/init.d/nginx start

La raíz del documento por defecto de nginx es /var/www que aún no existe; por lo tanto, debemos crearla de la siguiente manera:

mkdir /var/www  
 chown www-data:www-data /var/www

Escribe la dirección IP o el nombre de host de tu servidor web en un navegador (por ejemplo, http://192.168.0.100), y deberías ver la siguiente página:

Recibes un error 403 prohibido porque no hay una página de índice en /var/www.

4 Instalando PHP5

Podemos hacer que PHP5 funcione en nginx a través de FastCGI. Afortunadamente, Debian Squeeze proporciona un paquete PHP5 habilitado para FastCGI que instalamos así (junto con algunos módulos de PHP5 como php5-mysql que necesitas si deseas usar MySQL desde tus scripts PHP):

apt-get install php5-cgi php5-mysql php5-curl php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

Luego abre /etc/php5/cgi/php.ini y descomenta la línea cgi.fix_pathinfo=1:

vi /etc/php5/cgi/php.ini

| [...] ; cgi.fix_pathinfo proporciona soporte *real* para PATH_INFO/PATH_TRANSLATED para CGI. El comportamiento anterior de PHP era establecer PATH_TRANSLATED a SCRIPT_FILENAME, y no entender qué es PATH_INFO. Para más información sobre PATH_INFO, consulta las especificaciones de cgi. Establecer esto a 1 hará que PHP CGI corrija sus rutas para conformarse a la especificación. Un valor de cero hace que PHP se comporte como antes. El valor por defecto es 1. Debes corregir tus scripts para usar SCRIPT_FILENAME en lugar de PATH_TRANSLATED. ; http://php.net/cgi.fix-pathinfo cgi.fix_pathinfo=1 [...] |

No hay un paquete de demonio FastCGI independiente para Debian Squeeze, por lo tanto, usamos el programa spawn-fcgi de lighttpd. Instalamos lighttpd de la siguiente manera:

apt-get install lighttpd

Verás un mensaje de error que dice que lighttpd no puede iniciar porque el puerto 80 ya está en uso:

Iniciando servidor web: lighttpd2011-02-24 01:43:18: (network.c.358) no se puede enlazar al puerto:  80 Dirección ya en uso  
  fallido!  
 invoke-rc.d: initscript lighttpd, acción "start" falló.

Así es como se supone que debe ser porque nginx ya está escuchando en el puerto 80. Ejecuta

update-rc.d -f lighttpd remove

para que lighttpd no se inicie al arrancar el sistema.

Hemos instalado lighttpd porque solo necesitamos un programa que viene con el paquete, /usr/bin/spawn-fcgi, que podemos usar para iniciar procesos FastCGI. Echa un vistazo a

spawn-fcgi --help

para aprender más sobre ello.

Para iniciar un demonio PHP FastCGI escuchando en el puerto 9000 en localhost y ejecutándose como el usuario y grupo www-data, ejecutamos el siguiente comando:

/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid

Por supuesto, no querrás escribir ese comando manualmente cada vez que inicies el sistema, así que para que el sistema ejecute el comando automáticamente al arrancar, abre /etc/rc.local…

vi /etc/rc.local

… y agrega el comando al final del archivo (antes de la línea de salida):

| [...] /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u www-data -g www-data -f /usr/bin/php5-cgi -P /var/run/fastcgi-php.pid [...] |

5 Configurando nginx

La configuración de nginx está en /etc/nginx/nginx.conf que abrimos ahora:

vi /etc/nginx/nginx.conf

La configuración es fácil de entender (puedes aprender más sobre ella aquí: http://wiki.codemongers.com/NginxFullExample y aquí: http://wiki.codemongers.com/NginxFullExample2)

Primero (esto es opcional) aumenta el número de procesos de trabajo y establece el keepalive_timeout a un valor razonable:

| [...] worker_processes 5; [...] keepalive_timeout 2; [...] |

Los hosts virtuales se definen en contenedores server {}. El vhost por defecto se define en el archivo /etc/nginx/sites-available/default - modifiquémoslo de la siguiente manera:

vi /etc/nginx/sites-available/default

| [...] server { listen 80; ## escuchar para ipv4 listen [::]:80 default ipv6only=on; ## escuchar para ipv6 server_name _; access_log /var/log/nginx/localhost.access.log; location / { root /var/www; index index.php index.html index.htm; } location /doc { root /usr/share; autoindex on; allow 127.0.0.1; deny all; } location /images { root /usr/share; autoindex on; } #error_page 404 /404.html; # redirigir páginas de error del servidor a la página estática /50x.html # #error_page 500 502 503 504 /50x.html; #location = /50x.html { # root /var/www/nginx-default; #} # proxy los scripts PHP a Apache escuchando en 127.0.0.1:80 # #location ~ \.php$ { #proxy_pass http://127.0.0.1; #} # pasar los scripts PHP al servidor FastCGI escuchando en 127.0.0.1:9000 # location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; include fastcgi_params; } # negar acceso a archivos .htaccess, si la raíz del documento de Apache # coincide con la de nginx # location ~ /\.ht { deny all; } } [...] |

servername ; hace de esto un vhost por defecto que captura todo (por supuesto, también puedes especificar un nombre de host aquí como www.example.com).

En la parte location /, he agregado index.php a la línea de índice. root /var/www; significa que la raíz del documento es el directorio /var/www.

La parte importante para PHP es la estrofa location ~ .php$ {}. Descoméntala para habilitarla. Asegúrate de que cambias la línea fastcgi_param a fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name; (reemplaza /var/www con la raíz del documento de tu vhost) porque de lo contrario el intérprete de PHP no encontrará el script PHP que llamas en tu navegador.

Asegúrate de que haya algunos espacios entre include y fastcgi_params; - en el archivo por defecto esto está escrito como una sola palabra, lo cual es un error.

Ahora guarda el archivo y reinicia nginx:

/etc/init.d/nginx restart

Ahora crea el siguiente archivo PHP en la raíz del documento /var/www:

vi /var/www/info.php

| |

Ahora llamamos a ese archivo en un navegador (por ejemplo, http://192.168.0.100/info.php):

Como ves, PHP5 está funcionando, y está funcionando a través de FastCGI, como se muestra en la línea de API del servidor. Si desplazas hacia abajo, verás todos los módulos que ya están habilitados en PHP5, incluyendo el módulo de MySQL:

6 Enlaces

Sobre El Autor

Falko Timme es el propietario de Timme Hosting (alojamiento web nginx ultra-rápido). Es el mantenedor principal de HowtoForge (desde 2005) y uno de los desarrolladores principales de ISPConfig (desde 2000). También ha contribuido al libro de O’Reilly “Administración de Sistemas Linux”.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.