5 consejos para aumentar el rendimiento de su servidor web Apache

5 consejos para aumentar el rendimiento de su servidor web Apache

Según un informe reciente de Netcraft (una conocida compañía de Internet que proporciona entre otros servicios de estadísticas de uso del navegador web), apache sigue siendo el servidor web más utilizado entre sitios y computadoras orientadas a Internet.

5 consejos para aumentar el rendimiento de su servidor web Apache

Además, apache sigue experimentando el mayor crecimiento entre los principales servidores web, seguido de Nginx y Iis. Por lo tanto, si usted es un administrador del sistema a cargo de administrar las instalaciones de Apache, debe saber cómo asegurarse de que su servidor web funcione lo mejor de su capacidad de acuerdo con sus necesidades (o de su cliente).

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

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

Consejo #1: Siempre mantenga actualizado a Apache a su última versión

No hace falta decir que tener la última versión de Apache instalada 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 el Centos 7 Los repositorios son 2.4.6, Mientras en Debian's es 2.4.10.

Sin embargo, puede haber una mejora reciente o una corrección de errores que se ha agregado a una versión estable recientemente lanzada, que luego se pone a disposición 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 actuales / sitios / hosts virtuales como precaución.

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

# httpd -v [en sistemas basados ​​en redhat/centos] # apache2 -v [en sistemas basados ​​en Debian/Ubuntu] 
Verifique la versión de Apache

Como regla general, quédese con el método de actualización proporcionado por el administrador de paquetes de su distribución elegida (yum actualización httpd o aptitud segura-actualización apache2, para CentOS o Debian, respectivamente) a menos que no haya otra forma. Puede leer las últimas notas de versión en la sección de documentación de Apache en el sitio web del proyecto del servidor Apache HTTP.

Consejo #2: Si está usando un núcleo mayor de 2.4, considere actualizar ahora

Por qué? Versiones de núcleo 2.4 y arriba tiene la llamada del sistema SendFile Kernel habilitado 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 del servidor web del servidor) y permite a Apache entregar contenido estático más rápido y con una utilización de CPU más baja mediante la realización de operaciones simultáneas de lectura y envío.

Puede ver su kernel instalado actualmente con:

# UNUME -R 

y compararlo con el último núcleo estable en www.núcleo.org (4.3 en el momento de este escrito).

Verifique la versión del núcleo de Linux

Aunque es un proceso que no está destinado a principiantes, la actualización de su núcleo es un ejercicio interesante para aprender más sobre las partes internas de Linux.

Consejo #3: Elija el Módulo de procesamiento múltiple (MPM) que funcione mejor para su caso

En la práctica, MPMS Extienda la funcionalidad modular de Apache al permitirle decidir cómo configurar el servidor web para que se uniera a los puertos de red en la máquina, acepte solicitudes de los clientes y use procesos para niños (y hilos, alternativamente) para manejar dichas solicitudes.

Comenzando con la versión 2.4, Apache ofrece tres MPM diferentes para elegir, dependiendo de sus necesidades:

  1. El prefork MPM utiliza múltiples procesos infantiles sin enhebrar. Cada proceso maneja una conexión a la vez sin crear hilos separados para cada. Sin entrar en demasiados detalles, podemos decir que querrá usar este MPM solo al depurar una aplicación que usa, o si su aplicación necesita lidiar con módulos no seguros como MOD_PHP.
  2. El obrero MPM usa varios hilos por procesos infantiles, donde cada hilo maneja una conexión a la vez. Esta es una buena opción para los servidores de alto tráfico, ya que permite que se manejen más conexiones concurrentes 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 las versiones 2.4 y más. Es similar al trabajador MPM en el sentido de que también crea múltiples hilos por proceso infantil, pero con una ventaja: causa Mantener viva o inactivo Las conexiones (mientras permanecen en ese estado) para ser manejadas por un solo hilo, liberando así la memoria que se puede asignar a otros hilos. Este MPM no es adecuado para su uso con módulos no seguros mod_php, para el cual un reemplazo tal Php-FPM debe usarse en su lugar.

Para comprobar el Mpm Utilizado por su instalación de Apache, puede hacer:

# httpd -v 

La imagen a continuación muestra que este servidor web en particular está utilizando el MPM prefork.

Verifique Apache MPM

Para cambiar esto, necesitará editar:

#/etc/httpd/conf.módulos.d/00 mpm.conf [en sistemas basados ​​en Redhat/Centos] #/etc/apache2/mods-disponible/.Cargar [en sistemas basados ​​en Debian/Ubuntu] 

Donde puede estar mpm_event, mpm_worker, o mpm_prefork.

y la falta de comment la línea que carga el módulo deseado como así:

Loadmodule mpm_event_module módulos/mod_mpm_event.entonces 

Nota: Para que el evento MPM funcione en Debian, es posible que deba instalar el libapache2-mod-Fastcgi Paquete de los repositorios no libres.

Además, para CentOS necesitará Php-FPM (junto con FCGI y mod_fcgid) mientras que en Debian se llama Php5-FPM (junto con apache2-mpm-evento).

Por último, pero no menos importante, reinicie el servidor web y el recién instalado Php-FPM (o Php5-FPM) servicio:

En Redhat/Centos

# SystemCTL reiniciar httpd php-fpm && systemctl Habilitar httpd php-fpm 

En Debian/Ubuntu

# SystemCTL reiniciar apache2 php5-fpm && systemctl Habilitar apache2 php5-fpm 

Aunque puede configurar Apache para usar un MPM específico, esa configuración se puede anular en una base de host por virtual de la misma manera que se indicó anteriormente.

Simplemente suelte las etiquetas correspondientes en el archivo de configuración para cada host virtual y está listo para comenzar, pero asegúrese de usar un solo MPM por VHOST.

Finalmente, tenga en cuenta que independientemente de su distribución elegida, Php-FPM se basa en la implementación de Fastcgi, Cuál es la razón por la que recomendé las instalaciones adicionales del paquete antes.

Para más detalles y ejemplos en 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 veo después de cambiar el MPM predeterminado de prefork al evento en el mismo cuadro que se muestra en la imagen anterior:

Elija el módulo Apache MPM

En Centos 7, Deberá asegurarse de que el http y https Los servicios están habilitados a través del firewall, y que las interfaz (s) de red se agregan 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 = interno # firewall -cmd --add-service = http # firewall-cmd --add-service = https # firewall-cmd --add-service = http --permanent # firewall-cmd --add-service = https --Permanent # firewall -Cmd -Re -Reload 

La razón por la que estoy mencionando esto es porque recientemente experimenté un problema en el que se evitó la configuración de configuración de firewalld predeterminada en una nube VPS Php-FPM y apache de procesar archivos PHP.

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

Compare el evento Apache y el módulo de prefork

Este es el código PHP que he guardado en un archivo llamado checkifiExists.php:

 

Luego ejecutaremos la herramienta de referencia Apache (AB) con 200 solicitudes simultáneas hasta 2000 Se completan las solicitudes:

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

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

Prueba de carga de rendimiento de Apache

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

Consejo #4: Asigne Ram sabiamente a Apache

Quizás el elemento de hardware más crítico a tener en cuenta es la cantidad de RAM asignado para cada proceso de apache. Si bien no puede controlar esto directamente, puede restringir la cantidad de procesos infantiles a través del MaxRequestworkers directiva (anteriormente conocida como Clientes maximos En Apache 2.2), que pondrá límites en el uso de RAM por Apache. Una vez más, puede establecer este valor en una base de host por host o por 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á para los procesos de Apache. Una cosa que nunca desea que haga su servidor web es comenzar a usar intercambio, ya que eso disminuirá significativamente su rendimiento. Por lo tanto, siempre debe mantener el uso de RAM por Apache dentro de los límites que puede pagar y nunca confiar en el intercambio por ello.

Por ejemplo, el siguiente bloque restringirá el número de clientes simultáneos a 30. Si más clientes llegan al anfitrión, pueden experimentar 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 la larga, también lo mejor para su sitio.

Puedes colocar este bloque adentro /etc/httpd/conf/httpd.confusión o /etc/apache2/apache2.confusión, Dependiendo de si está usando CentOS o Debian.

Tenga en cuenta que el mismo principio se aplica a todos MPMS - Estoy usando el evento aquí para continuar con el concepto descrito en el consejo anterior:

 Startervers 3 minsparethreads 25 maxsparethreads 75 Threadlimit 64 ThreadSperChild 25 MaxRequestworkers 30 MaxConnectionsperChild 1000  

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

Consejo #5: Conozca sus aplicaciones

Como regla general, no debe cargar ningún módulo Apache que no sea estrictamente necesario para que su aplicación funcione. 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] 

Descargar / deshabilitar módulos en Cento, Tendrá que comentar la línea que comience con Módulo de carga (ya sea en el archivo de configuración principal o en uno auxiliar en el interior /etc/httpd/conf.módulos.d.

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

# A2DISMOD MODULE_NAME 

Para habilitarlo de vuelta:

# a2enmod módulo_name 

En cualquier caso, recuerde reiniciar Apache para que los cambios entren en vigencia.

Resumen

En este artículo hemos revisado 5 consejos que lo ayudará 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 mod_pagespeed para mejorar el rendimiento del servidor web y el artículo de los consejos de endurecimiento de Apache en TECMINT.com también.

Dado que no podemos 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í, siéntase libre de informarnos usando el formulario de comentarios a continuación.