De 4,2 s a 0,6 s: Optimización a fondo de un servidor web Ubuntu y PHP sin cambiar de hosting
Guía práctica basada en una auditoría real: cómo pasamos una web lenta y pesada a una puntuación de 96 en Google PageSpeed aplicando ajustes de Nginx, OPcache, compresión Brotli y afinado de MySQL.
Ficha Técnica de la Intervención
- Infraestructura: VPS Ubuntu Server 4 vCPU / 8 GB RAM con Nginx y PHP 8.2.
- Problema inicial: Tiempo de carga medio de 4,2 segundos (TTFB superior a 1,8 s) y penalización SEO en Google Core Web Vitals.
- Causa raíz: Pool de PHP-FPM sin calibrar, falta de OPcache y consultas MySQL sin índices adecuados.
- Resultado final: Carga completa en 640 ms, TTFB de 120 ms y Google PageSpeed móvil al 96/100.
1. El Mito de "Necesitamos un servidor más caro"
Cuando una web de empresa empieza a responder con lentitud, la recomendación habitual de muchos proveedores es aumentar el plan del servidor (duplicar RAM y CPU). En el 85% de los casos que auditamos, el cuello de botella no es la potencia del hardware, sino una configuración de software por defecto que desaprovecha los recursos.
2. Las 4 Claves de la Optimización
1. Ajuste fino del pool PHP-FPM
El servidor utilizaba el gestor dinámico de procesos con valores estándar de instalación, provocando que los procesos de PHP se destruyeran y recrearan constantemente ante cada visitante. Cambiamos el modo de ejecución a ondemand o static con reserva fija de memoria:
pm = ondemand
pm.max_children = 50
pm.process_idle_timeout = 10s
pm.max_requests = 1000
2. Activación agresiva de Zend OPcache
Sin OPcache, el intérprete de PHP debe compilar cada archivo de código en cada visita. Ajustando la memoria compartida a 256 MB y activando la validación por marcas de tiempo en producción, el TTFB se redujo un 55% al instante.
3. Compresión moderna y cabeceras de caché estática
Configuramos compresión Gzip/Brotli para todos los recursos textuales (HTML, CSS, JS, SVG) y forzamos expiración de 1 año en Nginx para ficheros inmutables con identificador de versión (hash).
4. Detección y optimización de Slow Queries en MySQL
Habilitamos el registro de consultas lentas (slow_query_log) para cazar tres consultas que hacían un escaneo completo de tabla (Full Table Scan). Añadir dos índices combinados redujo el tiempo de respuesta de esas peticiones de 1.200 ms a 14 ms.
3. Gráfica de Rendimiento Antes vs. Después
¿Tu web carga lenta o notas que el servidor se ahoga?
Hacemos un diagnóstico exhaustivo de tu servidor Ubuntu y PHP sin interrumpir tu servicio.