5 consejos para mejorar el rendimiento de su servidor web Apache

5 consejos para mejorar el rendimiento de su servidor web Apache

Según un informe reciente de Netcraft (una conocida empresa de Internet que proporciona, entre otros servicios, estadísticas de uso del navegador web), Apache. sigue siendo el servidor web más utilizado entre los sitios e Internet. frente a las computadoras.

 Mejorar Rendimiento del servidor web Apache  Mejore el rendimiento del servidor web Apache 5 consejos para mejorar el rendimiento de su servidor web Apache

Además, Apache. sigue experimentando el mayor crecimiento entre los principales servidores web, seguido de Nginx. y II S. Por lo tanto, si usted es un administrador de sistemas a cargo de administrar las instalaciones de Apache, necesita saber cómo asegurarse de que su servidor web funcione al máximo de su capacidad de acuerdo con sus necesidades (o las de su cliente).

En este artículo, analizaremos algunos consejos que le ayudarán a asegurarse de que Apache se ejecute sin problemas y pueda manejar la cantidad de solicitudes que espera de los clientes remotos.

Sin embargo, tenga en cuenta que Apache no fue diseñado con el objetivo de establecer registros de referencia, pero, aun así, aún es capaz de proporcionar un alto rendimiento en casi cualquier caso de uso que pueda imaginar.

SUGERENCIA # 1: Mantenga siempre Apache actualizado a su última versión

No hace falta decir que tener instalada la última versión de Apache es probablemente una de las primeras cosas que debe considerar. A partir del 19 de noviembre de 2015, la última versión de Apache disponible en los repositorios de CentOS 7. es 2.4.6. mientras que en Debian. es 2.4.10.

freestar.config.enabled_slots.push

Sin embargo, puede haber una mejora reciente o un error corrección que se ha agregado a una versión estable recién lanzada, que luego está disponible para descargar e instalar desde la fuente. Las instrucciones de compilación e instalación también se proporcionan aquí; solo recuerde que si elige este método de actualización, es posible que desee hacer una copia de seguridad de sus archivos de configuración/sitios/hosts virtuales actuales como precaución.

En cualquier caso, puede verificar su versión instalada actualmente de la siguiente manera:

# httpd-v [En sistemas basados ​​en RedHat/CentOS] # apache2 –v [En sistemas basados ​​en Debian/Ubuntu]  Verificar versión de Apache  Verificar la versión de Apache Compruebe la versión de Apache

Como regla general, siga el método de actualización proporcionado por el administrador de paquetes de su c distribución de hosen (yum update httpd o aptitude safe-upgrade apache2, para CentOS o Debian, respectivamente) a menos que no haya otra forma. Puede leer las últimas notas de la versión en la sección Documentación de Apache en el sitio web del proyecto del servidor HTTP Apache.

SUGERENCIA # 2: Si está utilizando un Kernel anterior a 2.4, considere actualizar ahora

¿Por qué? Las versiones de kernel 2.4. y superiores tienen la llamada al sistema de kernel sendfile habilitada de forma predeterminada. Eso, a su vez, facilita las transferencias de archivos de red de alto rendimiento (que se desean en el contexto de las comunicaciones entre el cliente y el servidor web) y permite que Apache entregue contenido estático más rápido y con una menor utilización de la CPU al realizar operaciones de lectura y envío simultáneas.

Puede ver su kernel actualmente instalado con:

# uname-r

y compararlo con el kernel estable más reciente en www.kernel.org (4.3 en el momento de escribir este artículo).

 Verificar la versión del kernel de Linux  Verificar la versión del kernel de Linux Verificar la versión del kernel de Linux

Aunque es un proceso no Dirigido a principiantes, la actualización de su kernel es un ejercicio interesante para aprender más sobre los aspectos internos de Linux.

SUGERENCIA # 3: Elija el Módulo de multiprocesamiento (MPM) que funcione mejor para su caso

En la práctica, los MPM. amplían la funcionalidad modular de Apache al permitirle decidir cómo configurar el servidor web para que se vincule a los puertos de red de la máquina, acepte solicitudes de clientes y use procesos secundarios (y subprocesos, alternativamente) para manejar tales solicitudes.

Comenzando con versión 2.4, Apache ofrece tres MPM diferentes para elegir, según sus necesidades:

  1. El MPM prefork utiliza varios procesos secundarios sin subprocesos. Cada proceso maneja una conexión a la vez sin crear subprocesos separados para cada uno. Sin entrar en demasiados detalles, podemos decir que querrá usar este MPM solo cuando depure una aplicación que use, o si su aplicación necesita lidiar con módulos no seguros para subprocesos como mod_php.
  2. El trabajador MPM usa varios subprocesos por proceso hijo, donde cada subproceso maneja una conexión a la vez. Esta es una buena opción para servidores de alto tráfico, ya que permite manejar más conexiones simultáneas con menos RAM que en el caso anterior.
  3. Finalmente, el evento MPM es el MPM predeterminado en la mayoría de las instalaciones de Apache para versiones. 2.4 y superior. Es similar al MPM trabajador en que también crea varios subprocesos por proceso hijo, pero con una ventaja: provoca conexiones KeepAlive. o inactivas. (mientras permanecen en ese estado). para ser manejado por un solo subproceso, liberando así memoria que se puede asignar a otros subprocesos. Este MPM no es adecuado para su uso con módulos no seguros para subprocesos como mod_php. para los cuales se debe usar un reemplazo como PHP-FPM. en su lugar.

Para verificar el MPM. usado por su instalación de Apache, puede hacer:

# httpd-V

La siguiente imagen muestra que este servidor web en particular está usando el prefork MPM.

Verificar Apache MPM  Verificar Apache MPM Verificar Apache MPM

Para cambiar esto, necesitará editar:

#/etc/httpd/conf.modules.d/00-mpm.conf [En sistemas basados ​​en RedHat/CentOS] #/etc/apache2/mods-available/ .load [En sistemas basados ​​en Debian/Ubuntu]

Donde puede ser mpm_event. mpm_worker. o mpm_prefork.

y descomente la línea que carga el módulo deseado así:

LoadModule mpm_event_module modules/mod_mpm_event.so

Note. Para que el evento MPM funcione en Debian, es posible que deba instalar el paquete libapache2-mod-fastcgi. desde los repositorios que no son libres.

Además, para CentOS usted necesitará php-fpm. (junto con fcgi. y mod_fcgid. mientras que en Debian se llama php5-fpm. (junto con con apache2-mpm-event. .

Por último, pero no menos importante, reinicie el servidor web y el php-fpm. recién instalado (o php5-fpm. servicio:

En RedHat/CentOS # systemctl restart httpd php-fpm && systemctl enable httpd php-fpm En Debian/Ubuntu # systemctl restart apache2 php5-fpm && systemctl enable apache2 php5-fpm

Aunque puede configurar Apache para que use un MPM específico, esa configuración puede anularse por host virtual de la misma manera que se indicó anteriormente.

Simplemente coloque las etiquetas correspondientes en el archivo de configuración para cada host virtual y estará listo para comenzar, pero asegúrese de que está usando una y solo una MPM por vhost.

Por último, tenga en cuenta que Independientemente de su distribución elegida, php-fpm. se basa en la implementación de FastCGI. que es la razón por la que recomendé las instalaciones de paquetes adicionales antes.

Para obtener más detalles y ejemplos sobre php-fpm. y cómo puede, junto con el evento MPM, aumentar el rendimiento de Apache, debe consultar la documentación oficial.

Esto es lo que yo vea después de cambiar el MPM predeterminado de prefork a event en el mismo cuadro que se muestra en la imagen anterior:

 Choose Apache MPM Module  Choose Apache MPM Module Choose Apache MPM Module

En CentOS 7. Deberá asegurarse de que los servicios http. y https. estén habilitados a través del firewall y que las interfaces de red se agreguen correctamente a la zona predeterminada.

Por ejemplo:

# firewall-cmd–zone = internal–add-interface = tun6to4 # firewall-cmd–zone = internal–add-interface = tun6to4–permanent # firewall-cmd–set-default-zone = internal # firewall-cmd–add-service = http # firewall-cmd–add-s ervice = https # firewall-cmd–add-service = http–permanent # firewall-cmd–add-service = https–permanent # firewall-cmd–reload

La razón por la que menciono esto se debe a que recientemente experimenté un problema en el que la configuración predeterminada de firewalld en un VPS en la nube impedía que php-fpm. y Apache procesaran archivos php.

Como prueba básica (estoy seguro puedes pensar en los más complicados o estresantes), crearé un archivo php que verifica la existencia de otro archivo llamado test.php en el mismo directorio de dos servidores CentOS 7 con las mismas características de hardware y carga pero con diferente MPM. Uno de ellos usará event y el otro usará prefork:

 Comparar el evento Apache y el módulo Prefork Comparar el evento Apache y el módulo Prefork Comparar el evento Apache y el módulo Prefork

Este es el código php que guardé en un archivo llamado checkiffileexists.php:

Luego, ejecutaremos la herramienta de referencia de Apache (ab) con 200. solicitudes simultáneas hasta que se completen 2000. solicitudes:

# ab-k-c 100-n 2000 localhost/checkiffileexists.php

Ejecutemos la prueba y comparemos los resultados. Preste atención a las estadísticas de rendimiento:

Prueba de carga de rendimiento de Apache  Prueba de carga de rendimiento de Apache Prueba de carga de rendimiento de Apache

Como puede ver, el rendimiento del servidor con evento es muy superior a su homólogo prefork. en todos los aspectos de esta prueba.

SUGERENCIA # 4: Asigne la RAM de manera inteligente para Apache

Quizás el elemento de hardware más crítico a tener en cuenta es la cantidad de RAM. asignada para cada proceso de Apache. Si bien no puede controlar esto directamente, puede restringir la cantidad de procesos secundarios a través de la directiva MaxRequestWorkers. (anteriormente conocida como MaxClients. en Apache 2.2. , que pondrá límites al uso de RAM por parte de Apache. Nuevamente, puede establecer este valor por host o por host virtual.

Para hacer esto, debe tomar nota de la cantidad promedio de RAM utilizada por Apache, luego multiplicarla por el número de MaxRequestWorkers. y esa es la cantidad de memoria que se asignará a los procesos de Apache. Una cosa que nunca querrá que haga su servidor web es comenzar a usar swap, ya que eso disminuirá significativamente su rendimiento. Por lo tanto, siempre debe mantener el uso de RAM por parte de Apache dentro de los límites que puede pagar y nunca confiar en el intercambio.

Por ejemplo, el siguiente bloque restringirá el número de clientes simultáneos a 30. Si más clientes acceden al host, es posible que experimenten un retraso o una falla momentánea que se puede resolver fácilmente actualizando el navegador. Si bien esto puede considerarse indeseable, es más saludable para el servidor y, a largo plazo, también es mejor para su sitio.

Puede colocar este bloque dentro de/etc/httpd/conf/httpd.conf o/etc/apache2/apache2.conf, dependiendo de si está utilizando CentOS o Debian.

Tenga en cuenta que el mismo principio se aplica a todos los MPM. Estoy usando event aquí para continúe con el concepto descrito en el consejo anterior:

StartServers 3 MinSpareThreads 25 MaxSpareThreads 75 ThreadLimit 64 ThreadsPerChild 25 MaxRequestWorkers 30 MaxConnectionsPerChild 1000

En cualquier caso, se recomienda encarecidamente que consulte a los documentos de Apache 2.4 para ver qué directivas están permitidas para su MPM elegido.

SUGERENCIA # 5: Conozca sus aplicaciones

Como regla general, no debe cargar ningún Apache módulos que no son estrictamente necesarios para su aplicación trabajar. Esto requerirá al menos un conocimiento general de las aplicaciones que se ejecutan en su servidor, especialmente si es un administrador del sistema y hay otro equipo a cargo del desarrollo.

Puede enumerar los módulos cargados actualmente con:

# httpd-M [En sistemas basados ​​en RedHat/CentOS] # apache2ctl-M [En sistemas basados ​​en Debian/Ubuntu]

Para descargar/deshabilitar módulos en CentOS. deberá comentar la línea que comienza con LoadModule. (ya sea en el archivo de configuración principal o en uno auxiliar dentro de /etc/httpd/conf.modules.d.

Por otro lado, Debian. proporciona una herramienta llamada a2dismod. para deshabilitar módulos y se usa de la siguiente manera:

# a2dismod module_name

Para habilitarlo nuevamente:

# a2enmod module_name

En cualquier caso, recuerde reiniciar Apache para que los cambios surtan efecto.

Resumen

En este artículo hemos revisado 5 consejos. que te ayudarán Le ayudo a ajustar el servidor web Apache y aumentar su rendimiento. Además, debe recordar que la optimización y el rendimiento sin seguridad no tienen sentido, por lo que es posible que desee consultar la instalación de mod_pagespeed para mejorar el rendimiento del servidor web y el artículo de consejos de endurecimiento de Apache en Tecmint.com también.

Ya que nosotros no puede cubrir adecuadamente todos los aspectos de este tema en este artículo, tal vez piense en otras ideas que le gustaría compartir con el resto de la comunidad. Si es así, no dude en hacérnoslo saber utilizando el formulario de comentarios a continuación.