Quels sont les paramètres optimaux pour utiliser Apache ou NGINX en tant que serveur principal pour ELB ?

Date de la dernière mise à jour : 19-12-2022

Je souhaite utiliser une instance Amazon Elastic Compute Cloud (Amazon EC2) exécutant Apache ou NGINX en tant que serveur principal pour Elastic Load Balancing (ELB). Mais je ne sais pas quels paramètres utiliser pour obtenir les meilleures performances.

Solution

Les meilleurs paramètres pour un équilibreur de charge dépendent de votre cas d'utilisation. Pour des performances optimales, vous devez analyser les temps de réponse de votre application backend et les exigences de vos clients.

Si l'application backend exécute Apache ou NGINX, puis vérifiez les paramètres suivants :

Délai d'attente d'en-tête de client (Timeout dans Apache ; client_header_timeout dans NGINX) :
Définissez le délai d'expiration de votre application sur une valeur supérieure à la valeur de délai d'inactivité de l'équilibreur de charge. Procédez ainsi pour vous assurer que l'équilibreur de charge ferme correctement les connexions inactives. Si le serveur principal ferme une connexion sans en notifier l'équilibreur de charge, une erreur 504 peut se produire.

Keep-alive (KeepAlive dans Apache ; keepalive_disable dans NGINX) :
Activez les paramètres keep-alive pour réduire l'utilisation de l'UC et améliorer les temps de réponse. L'activation des paramètres keep-alive permet à l'équilibreur de charge de ne pas établir de nouvelle connexion TCP pour chaque demande HTTP.

Délai d'attente keep-alive (KeepAliveTimeout dans Apache ; keepalive_timeout dans NGINX) :

Lorsque l'option keep-alive est activée, choisissez un délai d'attente keep-alive plus long que le délai d'attente de l'équilibreur de charge.

Délai d'attente de lecture (RequestReadTimeout dans Apache ; client_header_timeout et client_body_timeout dans NGINX) :
Définissez des délais de lecture adaptés aux temps de réponse de votre application. Procédez ainsi pour vous assurer que votre équilibreur de charge maintient la connexion ouverte suffisamment longtemps pour recevoir l'en-tête et le corps de la demande.

Avertissement : vérifiez que la valeur du délai d'inactivité de l'équilibreur de charge est inférieure au délai d'attente du backend.

Nombre maximal de demandes keep-alive (MaxKeepAliveRequests dans Apache ; keepalive_requests dans NGINX) :
Cette option permet de définir le nombre de demandes traitées par une seule connexion TCP lorsque keep-alive est activé. Pour une meilleure utilisation des ressources, définissez le nombre maximum de demandes keep-alive sur 100 ou plus.

Paramètre AcceptFilter (AcceptFilter dans Apache ; accept_filter dans NGINX) :
Le paramètre AcceptFilter, activé par défaut, indique à Apache d'utiliser l'option TCP_DEFER_ACCEPT pour les connexions. Ce paramètre peut entraîner l'état « semi-ouvert » du socket TCP. Dans cet état, l'équilibreur de charge suppose que la connexion est établie, mais que la connexion n'est pas établie sur l'instance principale. Les connexions dans un état à moitié ouvert sont plus courantes dans des équilibreurs de charge à faible volume, où les connexions ont le temps de vieillir avant d'être utilisées.

Connexion : activez l'option %{X-Forwarded-For}i de sorte qu'Apache affiche l'en-tête x-forwarded-for ELB dans ses journaux pour chaque demande. Cet en-tête contient l'adresse IP du client d'origine. L'option %D ajoute le délai nécessaire pour terminer chaque demande envoyée aux journaux d'accès :

LogFormat "%{X-Forwarded-For}i %h %l %u %t \"%r\" %>s %b %D \"%{Referer}i\" \"%{User-Agent}i\"" combined

Apache : le module d'événements Apache MPM peut fermer prématurément les connexions à partir des équilibreurs de charge. La fermeture prématurée des connexions génère des erreurs HTTP 502 pour un Application Load Balancer et des erreurs HTTP 504 pour un Classic Load Balancer. Il est préférable d'utiliser plutôt le module de travail MPM pour réduire ce comportement.

Remarque : après avoir mis à jour votre configuration, redémarrez Apache ou NGINX.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?