Servidor web · 5 min read · Dec 30, 2025

Instalando Nginx Con Soporte PHP5 Y MySQL En Debian Lenny

Instalando Nginx Con Soporte PHP5 Y MySQL En Debian Lenny

Versión 1.0
Autor: Falko Timme

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 Lenny con soporte para PHP5 (a través de FastCGI) y soporte para MySQL.

¡No emito ninguna garantía de 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.0

Para instalar MySQL, ejecutamos

aptitude 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 Lenny que podemos instalar de la siguiente manera:

aptitude install nginx

Inicia nginx después:

/etc/init.d/nginx start

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 página de bienvenida de nginx:

4 Instalando PHP5

Podemos hacer que PHP5 funcione en nginx a través de FastCGI. Afortunadamente, Debian Lenny 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):

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

Luego abre /etc/php5/cgi/php.ini y agrega la línea cgi.fix_pathinfo = 1 justo al final del archivo:

vi /etc/php5/cgi/php.ini

| [...] cgi.fix_pathinfo = 1 |

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

aptitude install lighttpd

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

Starting web server: lighttpd2009-03-19 15:58:09: (network.c.300) can't bind to port: 80 Address already in use  
 failed!

Así 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 predeterminado 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; server_name _; access_log /var/log/nginx/localhost.access.log; location / { root /var/www/nginx-default; 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$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/nginx-default$fastcgi_script_name; include fastcgi_params; } # denegar 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 predeterminado 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/nginx-default; significa que la raíz del documento es el directorio /var/www/nginx-default.

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/nginx-default$fastcgi_script_name; (reemplaza /var/www/nginx-default 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 predeterminado esto se escribe 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/nginx-default:

vi /var/www/nginx-default/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 Server API. Si desplazas hacia abajo, verás todos los módulos que ya están habilitados en PHP5, incluido el módulo de MySQL:

6 Enlaces

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

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