Quiero usar una instancia de Amazon Elastic Compute Cloud (Amazon EC2) que ejecute Apache o NGINX como servidor de backend para Elastic Load Balancing (ELB). Quiero saber los ajustes que proporcionan el mejor rendimiento.
Resolución
Para obtener el mejor rendimiento, analiza los tiempos de respuesta de tu aplicación de backend y los requisitos de tus clientes.
Tiempo de espera del encabezado del cliente
Si el servidor de backend cierra una conexión y no lo notifica al equilibrador de carga, es posible que recibas un error HTTP 502 para un equilibrador de carga de aplicación. En el caso de un equilibrador de carga clásico, aparece un error HTTP 504.
Para evitar conexiones inactivas, establece el tiempo de espera de la aplicación en un valor superior al valor del tiempo de espera inactivo. Para configurar el tiempo de espera de la aplicación para Apache, consulta la directiva de tiempo de espera en el sitio web de Apache. Para NGINX, consulta client_header_timeout en el sitio web de NGINX.
Keepalive
Para reducir el uso de la CPU y mejorar el tiempo de respuesta, activa keepalive. Cuando activas keepalive, el equilibrador de carga no establece una nueva conexión TCP para cada solicitud HTTP.
Para activar keepalive para Apache, consulte la directiva de KeepAlive en el sitio web de Apache. Para activar keepalive en NGINX, establece keepalive_disable en ninguno. Para obtener más información, consulta keepalive_disable en el sitio web de NGINX.
Cuando actives la opción keepalive, elige un tiempo de espera de keepalive más largo que el tiempo de espera de inactividad del equilibrador de carga. Para configurar el tiempo de espera en Apache, consulta la directiva de KeepAliveTimeout en el sitio web de Apache. Para NGINX, consulta keepalive_timeout en el sitio web de NGINX.
Tiempos de espera de lectura
Establece tiempos de espera de lectura que se ajusten a los tiempos de respuesta de tu aplicación. El equilibrador de carga debe mantener la conexión abierta el tiempo suficiente para recibir tanto el encabezado como el cuerpo de la solicitud.
Nota: Asegúrate de que el valor del tiempo de espera de inactividad del equilibrador de carga sea inferior al tiempo de espera del backend.
Para establecer el tiempo de espera de lectura de la solicitud en Apache, consulta la directiva de RequestReadTimeout. Para establecer el tiempo de espera del encabezado del cliente en NGINX, consulta client_header_timeout en el sitio web de NGINX. Para conocer el tiempo de espera del cuerpo del cliente en NGINX, consulta client_body_timeout en el sitio web de NGINX.
Número máximo de solicitudes de keepalive
Cuando actives keepalive, establece el número de solicitudes que atiende una sola conexión TCP en 100 o más. Para establecer el número de solicitudes en Apache, consulta la directiva de MaxKeepAliveRequests en el sitio web de Apache. Para NGINX, consulta keepalive_requests en el sitio web de NGINX.
AcceptFilter
De forma predeterminada, AcceptFilter está activado. AcceptFilter indica a Apache que utilice la opción TCP_DEFER_ACCEPT para las conexiones y puede provocar que el socket TCP permanezca medio abierto. Cuando el socket TCP permanece en estado medio abierto, el equilibrador de carga asume que la conexión está establecida, pero la instancia de backend no establece la conexión por completo. Las conexiones medio abiertas son más comunes en los equilibradores de carga de bajo volumen, donde las conexiones permanecen inactivas antes de su uso.
Para configurar AcceptFilter en Apache, consulta la directiva de AcceptFilter en el sitio web de Apache. Para NGINX, consulta listen en el sitio web de NGINX.
Registro
Para activar la opción %{X-Forwarded-For}i para que Apache muestre el encabezado x-forwarded-for de ELB en sus registros para cada solicitud, ejecuta el siguiente comando:
LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b %D \"%{Referer}i\" \"%{User-Agent}i\"" combined
El encabezado x-forwarded-for header de ELB contiene la dirección IP del cliente original. La opción %D agrega el tiempo necesario para completar cada solicitud a los registros de acceso.
MPM de Apache
El módulo de procesamiento múltiple (MPM) de eventos de Apache podría cerrar prematuramente las conexiones de los equilibradores de carga y provocar un error HTTP 502 en un equilibrador de carga de aplicación. En el caso de un equilibrador de carga clásico, aparece un error HTTP 504.
En su lugar, se recomienda utilizar el MPM de trabajo.
Nota: Después de actualizar la configuración, reinicia Apache o NGINX.
Información relacionada
Instancias registradas para el equilibrador de carga clásico
Configurar el equilibrador de carga clásico