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-clientSe 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 nginxInicia nginx después:
/etc/init.d/nginx startEscribe 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-xslLuego 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 lighttpdVerá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 removepara 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 --helppara 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.pidPor 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.confLa 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 restartAhora 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
- nginx: http://nginx.net/
- Wiki de nginx: http://wiki.codemongers.com/Main
- PHP: http://www.php.net
- MySQL: http://www.mysql.com
- Debian: http://www.debian.org/
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.