Solo para visitantes de nuestro blog Obtenga 3 meses adicionales gratis + 10% de descuento en el plan trianual YSBLOG10
Agarra el trato

Cómo optimizar Apache En Linux Server: Guía sencilla

Última actualización: marzo 7, 2026 9 minutos de lectura Prahlada Prajapati
Optimizar  Apache en Linux

Para optimizar Apache en un servidor Linux, utilice el MPM de eventos con PHP-FPM, habilite HTTP/2 y Brotli/Gzip, ajuste KeepAlive y MaxRequestWorkers a su RAM/CPUAlmacene en caché los recursos estáticos con un control de caché adecuado, comprima y minimice la sobrecarga de TLS, supervise mediante mod_status y valide con pruebas de carga. Asegure, realice rotación de registros y revise periódicamente.

Optimización Apache En un servidor Linux, esto implica ajustar los módulos, el manejo de conexiones, el almacenamiento en caché y los límites del sistema operativo para que se adapten a tu carga de trabajo. En esta guía, te mostraré cómo optimizar Apache en entornos de servidor Linux paso a paso, utilizando valores predeterminados seguros, fórmulas prácticas y comandos que puede aplicar en Ubuntu/Debian y RHEL/CentOS/AlmaLinux.

Comprenda su conjunto de herramientas y sus objetivos.

Antes de cambiar la configuración, identifique qué está sirviendo y dónde está el cuello de botella: archivos estáticos, PHP/WordPress, API o descargas de archivos. La ruta de optimización difiere según el tráfico con alto uso de TLS, las API con mucha comunicación o los sitios de contenido.

Línea de base y seguimiento

  • Comprobar actual Apache Compilación y MPM: apachectl -V
  • Monitorear recursos: top/htop, free -m, iostat, ss -s
  • Habilitar server-status: mod_status para concurrencia en tiempo real y marcador
  • Prueba de rendimiento: utilice ab, wrk o siege para simular una concurrencia realista.
# Enable mod_status (Debian/Ubuntu)
sudo a2enmod status
echo "<Location /server-status>
    SetHandler server-status
    Require ip 203.0.113.0/24
</Location>" | sudo tee /etc/apache2/conf-available/status.conf
sudo a2enconf status
sudo systemctl reload apache2

# RHEL/AlmaLinux (httpd)
/usr/lib64/httpd/modules/mod_status.so is built-in or loadable
# Add in a vhost or conf.d/status.conf:
# <Location /server-status>SetHandler server-status Require ip 203.0.113.0/24</Location>
sudo systemctl reload httpd

Elige el MPM adecuado: evento vs trabajador vs prefork

ApacheEl módulo de multiprocesamiento (MPM) de dicta la concurrencia. Para la mayoría de los sitios modernos (especialmente PHP vía PHP-FPM), use el evento MPM. Prefork es heredado y solo es necesario si ejecuta módulos que no son seguros para subprocesos como mod_php (que debería evitar en favor de PHP-FPM).

Cambiar al evento MPM y PHP-FPM

# Debian/Ubuntu: switch to event MPM and PHP-FPM
sudo a2dismod mpm_prefork
sudo a2enmod mpm_event proxy_fcgi setenvif http2 headers deflate
sudo a2enconf php8.2-fpm  # adjust your PHP version
sudo systemctl restart php8.2-fpm
sudo systemctl restart apache2

# RHEL/AlmaLinux
sudo dnf install php-fpm
sudo systemctl enable --now php-fpm
# Ensure httpd uses event MPM (default on newer releases)
httpd -V | grep -i mpm
# In vhost, pass PHP to FPM:
# <FilesMatch .php$>SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost/"</FilesMatch>
sudo systemctl restart httpd

Sintoniza el evento MPM para tu RAM/CPU

Objetivo: evitar el intercambio de trabajadores estableciendo MaxRequestWorkers al máximo de trabajadores concurrentes. Apache hilos tu RAM puede manejar.

  • Estimar la memoria por solicitud: observe RES en top para apache2/httpd bajo carga (por ejemplo, 30–80 MB con PHP).
  • Fórmula: MaxRequestWorkers ≈ (Disponible RAM por la Apache) ÷ (Promedio Apache+PHP memoria por solicitud).
  • Conservar entre un 30 y un 40 %. RAM por la MySQL/Redis/Caché del sistema operativo.
# Example event MPM (Debian/Ubuntu: /etc/apache2/mods-available/mpm_event.conf)
# Example for 4 vCPU, 8 GB RAM, PHP-FPM workload where each request ≈ 60 MB
# Budget 4.5 GB for Apache: 4500 MB / 60 ≈ 75 workers (round down to 64 or 72)
<IfModule mpm_event_module>
    StartServers             2
    ServerLimit              8
    ThreadsPerChild         25
    ThreadLimit             64
    MaxRequestWorkers      200    # Threads = ServerLimit * ThreadsPerChild (cap at your calculation)
    MinSpareThreads         75
    MaxSpareThreads        150
    MaxConnectionsPerChild 3000   # Recycle to mitigate leaks
</IfModule>

Ajusta ServerLimit × ThreadsPerChild para alcanzar tu objetivo MaxRequestWorkers sin exceder la memoria disponible.

Habilitar HTTP/2, prioridades H2 y optimizaciones TLS.

Activar HTTP/2

HTTP/2 reduce la latencia mediante multiplexación y compresión de encabezados. Asegúrese de que su vhost sea SSL-habilitado con un certificado sólido.

# Debian/Ubuntu
sudo a2enmod http2 headers ssl
# In your SSL vhost:
Protocols h2 http/1.1
H2Push          off
H2Direct        on
# Reload
sudo systemctl reload apache2

# RHEL/AlmaLinux
# LoadModule http2_module modules/mod_http2.so
# In SSL vhost:
Protocols h2 http/1.1
sudo systemctl reload httpd

Habilitar compresión: Brotli (la mejor opción) o Gzip

# Brotli (preferred if available)
sudo a2enmod brotli || true
# Add globally or in vhost:
AddOutputFilterByType BROTLI_COMPRESS text/html text/plain text/css text/javascript application/javascript application/json image/svg+xml

# Fallback to Gzip (mod_deflate)
sudo a2enmod deflate
AddOutputFilterByType DEFLATE text/html text/plain text/css text/javascript application/javascript application/json image/svg+xml

# Avoid double-compressing already compressed formats
SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png|webp|avif|zip|gz|bz2|rar|7z|mp4|mp3|woff2?)$ no-gzip dont-vary

Configuración TLS que se guarda CPU

# Example TLS for performance and security (in SSL vhost or ssl.conf)
SSLProtocol             all -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite          TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:TLS-AES-128-GCM-SHA256
SSLHonorCipherOrder     off
SSLCompression          off
SSLSessionCache         shmcb:/var/run/apache2/ssl_scache(512000)
SSLSessionCacheTimeout  300
SSLOpenSSLConfCmd       Curves X25519:secp256r1

La reanudación de la sesión y los cifrados modernos reducen CPU por apretón de manos. Usar Vamos a cifrar Con renovación automática para un mantenimiento mínimo.

Ajusta KeepAlive, los tiempos de espera y los límites de solicitudes.

KeepAlive mejora el rendimiento, pero puede sobrecargar a los trabajadores si se configura con un valor demasiado alto. En HTTP/2, a menudo se puede permitir un KeepAliveTimeout más corto debido a la multiplexación.

# In apache2.conf or httpd.conf
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 2

# Timeouts to protect from slowloris and hanging backends
Timeout 30
RequestReadTimeout header=10-20,MinRate=500 body=20,MinRate=500

# Size limits (protect resources)
LimitRequestBody 10485760   # 10 MB (adjust for your app)
LimitRequestFields 100
LimitRequestFieldSize 16384

Almacenamiento en caché y optimización de activos estáticos

Aproveche el almacenamiento en caché del navegador

# mod_expires / mod_headers
sudo a2enmod expires headers
# In a global conf or vhost:
ExpiresActive On
ExpiresByType text/css "access plus 30 days"
ExpiresByType application/javascript "access plus 30 days"
ExpiresByType image/webp "access plus 90 days"
ExpiresByType image/png "access plus 90 days"
Header append Cache-Control "public"

Opcional: Almacenamiento en caché del lado del servidor para páginas dinámicas.

Usar ApacheUtiliza mod_cache para el almacenamiento en caché de páginas o fragmentos cuando tu aplicación lo permita. Para WordPress, combínalo con un plugin de caché de páginas o un proxy inverso/CDN.

# Disk cache example
sudo a2enmod cache cache_disk
CacheQuickHandler on
CacheEnable disk "/"
CacheRoot /var/cache/apache2/mod_cache_disk
CacheIgnoreCacheControl On
CacheDefaultExpire 600
CacheMaxFileSize 10000000

Siempre pruebe las reglas de caché para evitar servir contenido privado. Considere usar una CDN para la distribución global; reduce el ancho de banda y las conexiones TLS.

Optimizar PHP Manejo con PHP-FPM

PHP-FPM funciona mejor con MPM de eventos. Configure el grupo según su presupuesto de memoria y concurrencia.

# PHP-FPM pool (/etc/php/8.2/fpm/pool.d/www.conf)
pm = dynamic
pm.max_children = 60        # Match your MaxRequestWorkers and memory
pm.start_servers = 6
pm.min_spare_servers = 6
pm.max_spare_servers = 12
pm.max_requests = 500       # Recycle to avoid memory leaks

# Enable OPcache (/etc/php/8.2/fpm/php.ini)
opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000

Mapear PHP Conéctese a FPM mediante ProxyPassMatch o FilesMatch y confirme que los sockets/puertos coinciden. Revise el registro de lentitud de FPM para detectar cuellos de botella en los complementos o temas.

Registro, rotación y observabilidad

Troncos del tamaño adecuado

# Use combined log and rotate
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
CustomLog /var/log/apache2/access.log combined
ErrorLog  /var/log/apache2/error.log
LogLevel  warn

# Ensure logrotate (Debian/Ubuntu: /etc/logrotate.d/apache2)
sudo logrotate -f /etc/logrotate.conf

Prueba bajo carga

# Basic wrk example (install wrk first)
wrk -t4 -c100 -d60s --latency https://example.com/

# ApacheBench (ab)
ab -k -n 10000 -c 200 https://example.com/

Compara los percentiles de latencia y las tasas de error antes y después de los cambios. Usa mod_status para confirmar que no estás sobrecargando a los trabajadores.

Optimización a nivel de sistema operativo para alta concurrencia

La configuración predeterminada de Linux es conservadora. Aumente los descriptores de archivo y la cola de red cuando atienda miles de conexiones simultáneas.

# Increase file descriptors
# /etc/security/limits.d/99-apache.conf
www-data soft nofile 65536
www-data hard nofile 65536

# Kernel networking (e.g., /etc/sysctl.d/99-web.conf)
net.core.somaxconn = 4096
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65535
net.ipv4.tcp_max_syn_backlog = 4096
fs.file-max = 2097152
sudo sysctl --system

Reemplace www-data con apache en sistemas basados ​​en RHEL. Valide con ulimit -n en el Apache proceso del trabajador.

Refuerzo de la seguridad que también ahorra CPU

  • Habilite un WAF: mod_security con un conjunto de reglas optimizado (desactive las reglas de alto costo que no necesite).
  • Limitación de velocidad/mitigación de ataques DoS: mod_evasive o el firewall perimetral de una CDN.
  • Bloquea los bots abusivos con RewriteCond en las listas User-Agent/IP.
  • Desactive y elimine los módulos no utilizados para reducir la superficie de ataque y el consumo de memoria.
# Simple bot throttle with mod_evasive (example)
/etc/httpd/conf.d/mod_evasive.conf or /etc/apache2/mods-available/evasive.conf
DOSHashTableSize 3097
DOSPageCount 5
DOSPageInterval 1
DOSSiteCount 100
DOSSiteInterval 1
DOSBlockingPeriod 10

Lista de mantenimiento

  • Patch Apache, AbiertoSSL, y PHP regularmente.
  • Revisar el estado del mod semanalmente; ajustar los tamaños de los grupos MaxRequestWorkers y FPM.
  • Rotar y comprimir los registros; evitar que el disco se llene.
  • Audite los vhosts y el archivo .htaccess en busca de reescrituras costosas.
  • Utilice un entorno de prueba para testear los cambios y las actualizaciones.

Cuándo considerar el alojamiento administrado

Si prefieres centrarte en tu aplicación en lugar de en la optimización del kernel y MPM, managed stack ayuda. En YouStable, optimizamos Apache en Linux con MPM de eventos, PHPSe realiza una optimización de FPM, HTTP/2, Brotli y del sistema operativo, seguida de una validación con pruebas de rendimiento y monitorización continua. Es una vía segura para lograr un rendimiento predecible.

Ejemplo práctico de principio a fin (WordPress en Ubuntu)

  • Cambiar al evento MPM y PHP-FPM, deshabilitar prefork/mod_php.
  • Habilitar HTTP/2, Brotli/Gzip, Expires y encabezados Cache-Control.
  • Ajusta MaxRequestWorkers al presupuesto de memoria; establece KeepAliveTimeout en 2.
  • Utilice un complemento de caché de página y una CDN para los recursos globales.
  • Refuerce TLS y agregue mod_evasive; alcancetate y supervise mod_status.
# Quick validation
apachectl -M | egrep 'mpm|http2|deflate|brotli|headers|ssl'
apachectl -V | grep -i mpm
systemctl status php8.2-fpm
curl -I https://example.com/ | egrep 'HTTP/|content-encoding|cache-control|expires|alt-svc'

Siguiendo estos pasos, podrá optimizar Apache en entornos de servidor Linux para menor latencia, mejor rendimiento y mayor estabilidad, sin conjeturas. Ajuste en función de métricas reales, proteja sus recursos e itere. Si necesita ayuda, YouStable, manageEl equipo de alojamiento web puede encargarse de la optimización y la monitorización de principio a fin.

Preguntas Frecuentes

¿Cuál es el mejor MPM para WordPress? Apache?

Utilice el evento MPM con PHP-FPM. El evento maneja los keep-alives de manera eficiente y PHP corre Fuera del proceso, lo que mejora la concurrencia y la estabilidad. Evite usar prefork a menos que deba ejecutar módulos que no sean seguros para subprocesos.

¿Cómo puedo calcular MaxRequestWorkers de forma segura?

Mida el promedio de memoria por solicitud bajo carga, reserve entre un 30 y un 40 %. RAM para el sistema operativo/base de datos/caché, luego divida su Apache RAM Presupuesto por memoria por solicitud. Establezca ServerLimit × ThreadsPerChild en consecuencia y limite MaxRequestWorkers a ese número o menos.

¿Cómo habilito HTTP/2 en Apache?

Cargar mod_http2, asegurar SSL/TLS está habilitado y agregue “Protocolos h2 http/1.1” a su SSL vhost. Recargar ApacheConfirma con curl -I y busca HTTP/2 o usa las herramientas para desarrolladores de tu navegador.

Is Nginx siempre más rápido que Apache?

No. Con MPM de eventos, HTTP/2, compresión y almacenamiento en caché adecuado, Apache Se desempeña de manera competitiva. Nginx puede ser más ligero para archivos estáticos, pero para muchos WordPress/PHP pilas, sintonizadas Apache Es excelente y cuenta con muchas funciones.

¿Qué módulos debo desactivar para mejorar el rendimiento?

Desactive los módulos no utilizados, como autoindex, status (en sitios públicos), negotiation, cgi y cualquier módulo heredado que no sea necesario. Ejecute apachectl -M para listar los módulos y comente las líneas LoadModule de aquellos que no necesite.

Deja Tu Comentario

Su dirección de correo electrónico no será publicada. Las areas obligatorias están marcadas como requeridas *

Ir al Inicio