Saltar al contenido

8.2 La Pila de Software (LEMP Stack)

¡Prepárate!

  • Entenderás el significado del acrónimo corporativo global LEMP. - Sabrás conectar Nginx a un ejecutor CGI invisible capaz de leer código pesado PHP (php-fpm). - Instalarás un motor de SQL Relacional abierto (MariaDB). - Auditarás las colisiones de comunicación usando journalctl.

En la lección anterior encendimos un Nginx capaz de mostrar un solitario archivo index.html. El problema en 2026 es que ninguna página corporativa real usa HTML estático crudo dictado a mano. Las empresas emplean Gestores de Contenido monstruosos (como WordPress) o ERPs (como Odoo), los cuales están programados puramente usando Lenguajes Dinámicos (como PHP o Python) y almacenan millones de usuarios en Bases de Datos relacionales estructuradas.

Al ecosistema Sysadmin mundial estándar conformado por Linux, Engine-X (Nginx), MariaDB y PHP se le conoce corporativamente como la infraestructura Stack LEMP.


Nginx es un genio sirviendo archivos pasivos a la red (como fotos o HTML), pero es un inútil intentando entender código de lenguajes de programación. Si un usuario intenta visitar http://empresa.com/login.php, Nginx no tiene ni ideal de procesarlo y, por defecto, se rinde y ofrece al usuario la “descarga fría” de todo el código de programación interno a su disco local. ¡Un agujero de seguridad brutal!

Para solucionar esto existen los FPM (FastCGI Process Managers). Básicamente son demonios de sistema (systemctl) que corren independientemente escondidos al fondo escuchando órdenes.

ventana terminal
# Instalamos la navaja suiza de ejecución rápida asincrónica php-fpm
sudo apt install php-fpm

Configurando a Nginx para que delegue peticiones

Sección titulada “Configurando a Nginx para que delegue peticiones"

A Nginx hay que instruirle para que derive el trabajo difícil a nuestro recién instalado obrero de fondo. En el archivo sites-available/empresa.com añadiremos un bloque “Location” de francotirador especial que dice: “En el instante en el que veas un archivo con terminación .php, ni lo mires, envíaselo por un conducto TCP local a nuestro amigo FPM instalado ahora, él te devolverá el HTML masticado”.

server {
listen 80;
server_name mi-empresa.com;
root /var/www/mi-empresa.com/html;
# Decimos que prefiera correr index.php primero si existe
index index.php index.html;
# ¡El conducto Socket maestro!
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# Lanzando el balón de trabajo al socket unix ultrarrápido del obrero FPM versión 8
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
}
}

El último pilar de la Pila LEMP recae sobre el almacenamiento elástico. Sustituiremos la obsoleta deidad original (MySQL) por su alternativa comunitaria Open Source superior, estandarizada actualmente en los servidores de todo el globo terráqueo: MariaDB.

ventana terminal
# Lo bajará y arrancará el servicio automáticamente
sudo apt install mariadb-server
# El script LFCS que CIERRA puertas vulnerables de fábrica
sudo mariadb-secure-installation

(Ese maravilloso script de aseguramiento te obligará interactivamente a colocarle clave al administrador maestro (“Root”), borrará bases de datos “Test” inútiles y prohibirá brutalmente que alguien averigüe tu IP pública y se conecte a la base de datos sin estar logueado localmente).


La complejidad se multiplica al apilar servicios dispares (Nginx, PHP, y MariaDB), todos atados fuertemente por sus permisos del Módulo 2 al usuario maestro estandarizado de la web www-data. Si tras realizar el ensamblado en el examen LFCS del Stack el navegador vomita una fatal Página Blanca de la Muerte (Error HTTP 500), ¡jamás toques botones ni te inventes soluciones rezando!

  1. Pídele al demonio Web que te narre los horrores que ha vivido: journalctl -u nginx --no-pager | tail -n 20
  2. Ve al diario sangriento local que guardan los obreros y revísalo con los comandos clásicos: tail -f /var/log/nginx/error.log

Encontrarás respuestas precisas como “php-fpm carece del driver mariadb-php para conectar al corazón del SQL” o “Permiso denegado al abrir archivo var/www/…”.


  1. Es de noche. Has desplegado el Stack LEMP. Echas a andar Nginx subiendo tu archivo de programación secreta calculos-financieros.php al publichtml web. Como eres un purista, ignoraste instalar y activar el eslabón obrero mágico php-fpm o no incluiste su respectivo bloque traductor especial _location fastcgi_pass en el archivo “sites-available”. Un cliente real carga por primera vez la recien nacida URL desde Mozilla Firefox. ¿Cual es el estrepitoso y dantesco resultado visible desencadenado por el navegador según el protocolo estandarizado?

  2. Hemos inyectado MariaDB. Se espera que corra eternamente como un banco. Un programador se enfadó contigo en Slack exigiéndote que configures mediante UFW un allow 3306 puro abierto de MariaDB para la IP de su casa. Sin embargo el servidor deniega su conexión desde fuera incesantemente. Descubres asombrado que MariaDB ni siquiera instaló un puerto global atado arrojando ss -tulpn y mostrando “127.0.0.1:3306” por bandera. Tú no programaste eso. ¿Quién le ató las manos y cortó el cuello remoto de la base de datos por seguridad de tu infraestructura?

  3. Conoces profundamente la anatomía sysadmin LFCS. Cuando descargas una herramienta corporativa gigantesca (como un CRM de facturación), te regalan centenares de miles de archivos PHP revueltos en descargas comprimidas tarballs. Si tú las descomprimes burdamente todas con tu usuario personal local logueado desde tu casa hacia el trono maestro de despacho web ubicado en /var/www/crm/html mediante un simple arrastre… ¿qué orden correctiva OBLIGATORIA global te quedará por dictar sobre todo el enjambre arbóreo de carpetas antes de esperar que el FPM y Nginx arranquen mágicamente los procesamientos dinámicos sin estallar con “Denials 403”?