Servidor web · 7 min read · Jan 05, 2026

Instalando Nginx con PHP (como PHP-FPM) y MariaDB (LEMP) en Debian 8

Este tutorial te mostrará la instalación del servidor web Nginx en Debian 8. Nginx (pronunciado “engine x”) es un servidor HTTP gratuito, de código abierto y de alto rendimiento. Nginx es conocido por su estabilidad, conjunto de características ricas, configuración simple y bajo consumo de recursos. Este tutorial muestra cómo puedes instalar Nginx con soporte para PHP (a través de PHP-FPM) y MariaDB como reemplazo de MySQL. Esta configuración a menudo se denomina LEMP = Linux + nginx (pronunciado “ engine x”) + MySQL + PHP).

Nota Preliminar

En este tutorial, utilizo el nombre de host server1.example.com con la dirección IP 192.168.1.100. Estas configuraciones pueden diferir para ti, así que debes reemplazarlas donde sea apropiado. Debes tener un servidor Debian 8, usaré el servidor mínimo de Debian como el sistema base para este tutorial.

Actualizando el Sistema

Se recomienda actualizar las listas de paquetes e instalar cualquier actualización pendiente antes de comenzar con la configuración de Nginx. Ejecuta los siguientes comandos para instalar cualquier actualización pendiente.

apt-get update  
apt-get upgrade -y

Usaré el editor nano más adelante para editar archivos de configuración. Nano se puede instalar con este comando:

apt-get -y install nano 

Instalando MariaDB (como reemplazo de MySQL)

Para instalar MariaDB, ejecutamos:

apt-get -y install mariadb-server mariadb-client

Se te pedirá que proporciones una contraseña para el usuario root de MariaDB - 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 MariaDB manualmente más adelante:

Nueva contraseña para el usuario “root” de MariaDB: <– tucontraseñadeSQLroot
Repite la contraseña para el usuario “root” de MariaDB: <– tucontraseñadeSQLroot

Introduce la contraseña del usuario root de MariaDB.

Instalando Nginx

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

apt-get -y install nginx

Inicia Nginx después:

systemctl start nginx.service

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

Página de inicio de Debian Nginx.

La raíz del documento por defecto de nginx en Debian 8 es /var/www/html.

Instalando PHP

Podemos hacer que PHP5 funcione en nginx a través de PHP-FPM (PHP-FPM (FastCGI Process Manager) es una implementación alternativa de PHP FastCGI con algunas características adicionales útiles para sitios de cualquier tamaño, especialmente sitios más concurridos) que instalamos de la siguiente manera:

apt-get -y install php5-fpm

PHP-FPM es un proceso daemon (con el archivo de unidad systemd php5-fpm.service) que ejecuta un servidor FastCGI en el socket /var/run/php5-fpm.sock.

Configurando nginx

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

nano /etc/nginx/nginx.conf

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

Primero establece el keepalive_timeout a un valor razonable como 2 segundos:

[...]
    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 - vamos a modificarlo de la siguiente manera:

nano /etc/nginx/sites-available/default
[...]
server {  
 listen 80 default_server;  
 listen [::]:80 default_server;  
  
 # Configuración SSL  
 #  
 # listen 443 ssl default_server;  
 # listen [::]:443 ssl default_server;  
 #  
 # Certificados autofirmados generados por el paquete ssl-cert  
 # ¡No los uses en un servidor de producción!  
 #  
 # include snippets/snakeoil.conf;  
  
 root /var/www/html;  
  
 # Agrega index.php a la lista si estás usando PHP  
 index index.html index.htm index.nginx-debian.html index.php;  
  
 server_name _;  
  
 location / {  
 # Primer intento de servir la solicitud como archivo, luego  
 # como directorio, luego volver a mostrar un 404.  
 try_files $uri $uri/ =404;  
 }  
  
 # pasa los scripts PHP al servidor FastCGI escuchando en 127.0.0.1:9000  
 #  
 location ~ \.php$ {  
 include snippets/fastcgi-php.conf;  
   
 # # Con php5-cgi solo:  
 # fastcgi_pass 127.0.0.1:9000;  
 # Con php5-fpm:  
 fastcgi_pass unix:/var/run/php5-fpm.sock;  
 }  
  
 # 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 este un vhost por defecto que captura todo (por supuesto, también puedes especificar un nombre de host aquí como www.example.com).

He agregado index.php a la línea de índice. root /var/www/html; significa que la raíz del documento es el directorio /var/www/html.

La parte importante para PHP es la estrofa location ~ .php$ {}. Descoméntala como se muestra arriba para habilitarla.

Ahora guarda el archivo y recarga Nginx:

systemctl reload nginx.service

A continuación, abre /etc/php5/fpm/php.ini…

nano /etc/php5/fpm/php.ini

… y establece cgi.fix_pathinfo=0:

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

Recarga PHP-FPM:

systemctl reload php5-fpm.service

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

nano /var/www/html/info.php

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

Información de PHP.

Como ves, PHP5 está funcionando, y está funcionando a través de FPM/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. MySQL no está listado allí lo que significa que aún no tenemos soporte de MariaDB / MySQL en PHP.

Obteniendo Soporte de MySQL / MariaDB en PHP

Para obtener soporte de MySQL en PHP, podemos instalar el paquete php5-mysqlnd. Es una buena idea instalar algunos otros módulos de PHP también, ya que podrías necesitarlos para tus aplicaciones. Puedes buscar módulos de PHP disponibles así:

apt-cache search php5

Elige los que necesites e instálalos así:

apt-get -y install php5-mysqlnd php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-intl php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl

APCu es un caché de opcodes PHP gratuito y de código abierto para almacenar en caché y optimizar el código intermedio de PHP que extiende el opcache de PHP. Reemplaza la caché APC. y es similar a otros cachés de opcodes PHP, como eAccelerator y Xcache. Se recomienda encarecidamente tener uno de estos instalados para acelerar tu página PHP.

APCu se puede instalar de la siguiente manera:

apt-get install php5-apcu

Ahora recarga PHP-FPM:

systemctl reload php5-fpm.service

Ahora recarga http://192.168.1.100/info.php en tu navegador y desplázate hacia abajo a la sección de módulos nuevamente. Ahora deberías encontrar muchos nuevos módulos allí, incluido el módulo de MySQL:

Información de PHP con MySQL.

Haciendo que PHP-FPM use una conexión TCP (opcional)

Por defecto, PHP-FPM está escuchando en el socket /var/run/php5-fpm.sock. También es posible hacer que PHP-FPM use una conexión TCP. Para hacer esto, abre /etc/php5/fpm/pool.d/www.conf…

nano /etc/php5/fpm/pool.d/www.conf

… y haz que la línea listen se vea así:

[...]
;listen = /var/run/php5-fpm.sock
listen = 127.0.0.1:9000
[...]

Esto hará que PHP-FPM escuche en el puerto 9000 en la IP 127.0.0.1 (localhost). Asegúrate de usar un puerto que no esté en uso en tu sistema.

Luego recarga PHP-FPM:

systemctl reload php5-fpm.service

A continuación, revisa tu configuración de Nginx y todos tus vhosts y cambia la línea fastcgi_pass unix:/var/run/php5-fpm.sock; a fastcgi_pass 127.0.0.1:9000;, por ejemplo, así:

nano /etc/nginx/sites-available/default
[...]  
 location ~ \.php$ {  
   include snippets/fastcgi-php.conf;  
  
   # # Con php5-cgi solo:  
   # fastcgi_pass 127.0.0.1:9000;  
   # # Con php5-fpm:  
   # fastcgi_pass unix:/var/run/php5-fpm.sock;  
   fastcgi_pass 127.0.0.1:9000;  
 }
[...]  

Finalmente, recarga Nginx:

systemctl reload nginx.service

Imagen de Máquina Virtual

Este tutorial está disponible como máquina virtual lista para usar en formato OVA / OVF para suscriptores de Howtoforge. El formato de la VM es compatible con VMWare y Virtualbox y probablemente algunas otras herramientas que pueden importar este formato. Puedes encontrar el enlace de descarga en el menú de la derecha en la parte superior. Haz clic en el nombre del archivo para comenzar la descarga.

Los detalles de inicio de sesión de la VM son:

Inicio de Sesión SSH

Nombre de usuario: root
Contraseña: howtoforge

Inicio de Sesión en MariaDB

Nombre de usuario: root
Contraseña: howtoforge

Por favor, cambia las contraseñas después del primer arranque.

La VM está configurada para la IP estática 192.168.1.100, la IP se puede cambiar en el archivo /etc/network/interfaces.

Enlaces

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

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