Ahorre 15% en todos los servicios de hosting

Pon a prueba tus habilidades y obtén Descuento<\/span> en cualquier plan de hosting

Usa el código: Skills Comenzar
Secciones
Administración Linux Sistemas Operativos

Cómo Instalar Linux, Nginx, MySQL, PHP (LEMP) Stack en Ubuntu: Guía Completa

El stack LEMP — un acrónimo para Linux, Nginx, MySQL y PHP — es una de las configuraciones de servidor web más adoptadas para potenciar sitios web dinámicos y aplicaciones web de alto rendimiento. Al combinar la estabilidad inquebrantable de Linux, la velocidad vertiginosa de Nginx, las sólidas capacidades de gestión de datos de MySQL y la versatilidad de PHP, el stack LEMP ofrece un entorno de alojamiento potente, escalable y eficiente en recursos.

Ya sea que estés implementando un blog personal, un sitio web empresarial o una aplicación empresarial compleja, un stack LEMP correctamente configurado te proporciona mejor escalabilidad, tiempos de carga de página más rápidos y gestión eficiente de memoria — especialmente en condiciones de alto tráfico.

Si necesitas una base confiable para ejecutar este stack, AlexHost VPS Hosting proporciona servidores virtuales basados en Linux de alto rendimiento con acceso root completo, dándote control total sobre cada componente de tu entorno LEMP. Combina eso con un Certificado SSL para asegurar tu aplicación desde el primer día.

En esta guía completa, te guiaremos a través de cada paso de la instalación y configuración del stack LEMP completo en un servidor Ubuntu — desde la preparación inicial del sistema hasta probar tu entorno PHP en vivo.

1. Requisitos previos

Antes de comenzar, asegúrate de tener lo siguiente en su lugar:

  • Un servidor ejecutando Ubuntu 18.04, 20.04 o 22.04 LTS
  • Una cuenta de usuario con privilegios sudo
  • Acceso SSH o acceso directo a la terminal de tu servidor
  • Un nombre de dominio registrado (opcional pero recomendado para implementaciones en producción — puedes registrar uno a través de AlexHost Registro de Dominios)

> Consejo profesional: Para un entorno limpio y aislado con recursos garantizados, un plan de VPS Hosting es el punto de partida ideal para cualquier implementación LEMP.

2. Actualiza tu sistema

Antes de instalar cualquier paquete, es crítico actualizar tu índice de paquetes y aplicar todas las actualizaciones pendientes. Esto asegura que estés trabajando con las versiones más recientes y seguras de todo el software.

Abre tu terminal y ejecuta:

sudo apt update && sudo apt upgrade -y

Este comando actualiza la base de datos de paquetes locales y actualiza todos los paquetes instalados a sus versiones disponibles más recientes.

3. Instala Nginx

Nginx (pronunciado “engine-x”) es un servidor web de alto rendimiento impulsado por eventos y un proxy inverso. A diferencia de Apache, Nginx maneja conexiones concurrentes con consumo mínimo de memoria, lo que lo convierte en la opción preferida para entornos de alto tráfico.

Paso 1: Instala Nginx

sudo apt install nginx -y

Paso 2: Inicia y habilita Nginx

Después de la instalación, inicia el servicio Nginx y configúralo para que se lance automáticamente al arrancar el sistema:

sudo systemctl start nginx
sudo systemctl enable nginx

Paso 3: Verifica que Nginx esté en ejecución

Comprueba el estado del servicio para confirmar que Nginx está activo:

sudo systemctl status nginx

Deberías ver una salida indicando que el servicio está active (running). También puedes abrir un navegador web y navegar a la dirección IP de tu servidor:

http://your_server_ip

Si Nginx se está ejecutando correctamente, serás recibido por la página predeterminada “Welcome to nginx!”.

Paso 4: Configura el firewall (si aplica)

Si tienes UFW (Uncomplicated Firewall) habilitado, permite el tráfico HTTP y HTTPS:

sudo ufw allow 'Nginx Full'
sudo ufw status

4. Instala MySQL

MySQL es un poderoso sistema de gestión de bases de datos relacionales (RDBMS) de código abierto que sirve como la columna vertebral de datos para la mayoría de aplicaciones web dinámicas, incluyendo WordPress, Joomla y aplicaciones PHP personalizadas.

Paso 1: Instala MySQL Server

sudo apt install mysql-server -y

Paso 2: Asegura la instalación de MySQL

Una vez instalado, ejecuta el script de endurecimiento de seguridad integrado. Este script te ayuda a establecer una contraseña raíz fuerte, eliminar usuarios anónimos, deshabilitar el inicio de sesión remoto de raíz y eliminar la base de datos de prueba:

sudo mysql_secure_installation

Se te presentará una serie de preguntas. Las respuestas recomendadas para un servidor de producción son:

SolicitudRespuesta recomendada
¿Configurar componente VALIDATE PASSWORD?
Nivel de política de validación de contraseña2 (STRONG)
¿Eliminar usuarios anónimos?
¿Deshabilitar inicio de sesión remoto de raíz?
¿Eliminar base de datos de prueba?
¿Recargar tablas de privilegios?

Paso 3: Verifica que MySQL esté en ejecución

sudo systemctl status mysql

Paso 4: Inicia sesión en MySQL (verificación opcional)

sudo mysql -u root -p

Ingresa tu contraseña de raíz cuando se te solicite. Escribe exit para salir del shell de MySQL.

5. Instala PHP

PHP (Hypertext Preprocessor) es el lenguaje de scripting del lado del servidor que procesa contenido dinámico y se comunica con MySQL para servir páginas web impulsadas por datos. Al usar Nginx, PHP se maneja a través de PHP-FPM (FastCGI Process Manager), que procesa solicitudes PHP independientemente del servidor web para mejorar el rendimiento.

Paso 1: Instala PHP-FPM y la extensión MySQL

sudo apt install php-fpm php-mysql -y

También puedes querer instalar extensiones PHP comúnmente utilizadas para una compatibilidad más amplia de aplicaciones:

sudo apt install php-curl php-gd php-mbstring php-xml php-xmlrpc php-zip -y

Paso 2: Configura PHP-FPM para seguridad

Abre el archivo de configuración de PHP-FPM. Reemplaza 8.1 con tu versión de PHP instalada (verifica con php -v):

sudo nano /etc/php/8.1/fpm/php.ini

Localiza la directiva cgi.fix_pathinfo y establécela en 0 para prevenir una vulnerabilidad de seguridad crítica:

cgi.fix_pathinfo=0

> Por qué importa: Si cgi.fix_pathinfo se establece en 1, PHP intentará ejecutar el archivo más cercano que pueda encontrar si el archivo PHP solicitado no existe. Este comportamiento puede ser explotado por atacantes para ejecutar código arbitrario.

Guarda y cierra el archivo (Ctrl+X, luego Y, luego Enter).

Paso 3: Reinicia PHP-FPM

Aplica los cambios de configuración reiniciando el servicio PHP-FPM:

sudo systemctl restart php8.1-fpm

6. Configura Nginx para procesar PHP

Por defecto, Nginx no sabe cómo manejar archivos PHP. Necesitas crear un bloque de servidor (el equivalente de Nginx de un host virtual de Apache) que instruya a Nginx a pasar solicitudes PHP a PHP-FPM para procesamiento.

Paso 1: Crea el directorio raíz web

Crea el directorio donde se almacenarán los archivos de tu sitio web:

sudo mkdir -p /var/www/your_domain
sudo chown -R www-data:www-data /var/www/your_domain
sudo chmod -R 755 /var/www/your_domain

Reemplaza your_domain con tu nombre de dominio real o un nombre de proyecto descriptivo.

Paso 2: Crea un nuevo bloque de servidor Nginx

Crea un nuevo archivo de configuración de Nginx para tu sitio:

sudo nano /etc/nginx/sites-available/your_domain

Añade el siguiente bloque de configuración. Lee cuidadosamente los comentarios en línea — explican qué hace cada directiva:

server {
    listen 80;
    listen [::]:80;

    server_name your_domain www.your_domain;  # Replace with your domain or server IP

    root /var/www/your_domain;                # Document root — where your files live
    index index.php index.html index.htm;     # Default files to serve

    # Handle all requests; return 404 if file not found
    location / {
        try_files $uri $uri/ =404;
    }

    # Pass PHP scripts to PHP-FPM for processing
    location ~ .php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;  # Adjust PHP version as needed
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # Deny access to hidden files (e.g., .htaccess)
    location ~ /.ht {
        deny all;
    }
}

> Importante: Reemplaza your_domain con tu nombre de dominio real y ajusta php8.1-fpm.sock para que coincida con tu versión de PHP instalada.

Paso 3: Habilita el bloque de servidor

Crea un enlace simbólico desde sites-available a sites-enabled para activar la configuración:

sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

Para evitar un posible problema de memoria de hash bucket, también es una buena práctica abrir la configuración principal de Nginx y asegurar que la directiva server_names_hash_bucket_size esté sin comentarios:

sudo nano /etc/nginx/nginx.conf

Encuentra y descomenta:

server_names_hash_bucket_size 64;

Paso 4: Prueba la configuración de Nginx

Antes de reiniciar Nginx, siempre prueba la configuración para detectar errores de sintaxis:

sudo nginx -t

Si la salida muestra:

nginx: configuration file /etc/nginx/nginx.conf test is successful

Estás listo para proceder.

Paso 5: Reinicia Nginx

Aplica todos los cambios reiniciando el servicio Nginx:

sudo systemctl restart nginx

7. Crea y prueba un archivo PHP Info

Para confirmar que Nginx está pasando correctamente las solicitudes PHP a PHP-FPM, crea un archivo de prueba PHP simple en tu raíz de documentos.

Paso 1: Crea el archivo PHP Info

sudo nano /var/www/your_domain/info.php

Añade el siguiente contenido:

<?php
phpinfo();
?>

Guarda y cierra el archivo.

Paso 2: Accede a la página PHP Info

Abre tu navegador web y navega a:

http://your_domain/info.php

O, si aún no has configurado un dominio:

http://your_server_ip/info.php

Deberías ver la página de información de PHP — una descripción detallada de tu instalación de PHP, módulos cargados, valores de configuración y variables de entorno. Esto confirma que los tres componentes (Nginx, PHP-FPM y MySQL) están funcionando correctamente juntos.

Paso 3: Elimina el archivo PHP Info (paso crítico de seguridad)

Una vez que hayas confirmado que todo funciona, elimina el archivo info.php inmediatamente. Este archivo expone detalles sensibles de configuración del servidor que podrían ser explotados por actores maliciosos:

sudo rm /var/www/your_domain/info.php

8. Próximos pasos: Endurece y optimiza tu stack LEMP

Con tu stack LEMP funcionando, considera los siguientes pasos adicionales para preparar tu servidor para producción:

Habilita HTTPS con un certificado SSL gratuito

Asegura tu sitio con encriptación TLS/SSL usando Certbot y Let’s Encrypt:

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your_domain -d www.your_domain

Alternativamente, explora Certificados SSL de AlexHost para certificados validados comercialmente premium que proporcionan niveles de confianza más altos para aplicaciones comerciales y de comercio electrónico.

Optimiza el rendimiento de Nginx

Añade las siguientes directivas a tu configuración de Nginx para mejorar el rendimiento:

# Enable Gzip compression
gzip on;
gzip_types text/plain text/css application/json application/javascript text/xml application/xml;

# Enable browser caching for static assets
location ~* .(jpg|jpeg|png|gif|ico|css|js)$ {
    expires 30d;
    add_header Cache-Control "public, no-transform";
}

Configura un usuario MySQL dedicado

Evita usar la cuenta raíz de MySQL para tus aplicaciones. Crea un usuario de base de datos dedicado con privilegios limitados:

CREATE DATABASE your_app_db;
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON your_app_db.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;

Considera un panel de control para una gestión más fácil

Si prefieres una interfaz gráfica para gestionar tu stack LEMP, hosts virtuales Nginx, bases de datos y cuentas de correo, considera implementar un panel de control. AlexHost ofrece VPS con cPanel y una variedad de otros Paneles de control VPS para simplificar la administración del servidor sin sacrificar el rendimiento o el control.

9. Conclusión

Has instalado y configurado exitosamente un stack LEMP completo (Linux, Nginx, MySQL, PHP) en tu servidor Ubuntu. Aquí hay un resumen rápido de lo que lograste:

  • Nginx instalado, iniciado y