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

Dernière mise à jour : 17/03/2021

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. Quels sont les paramètres à utiliser pour des performances optimales ?

Ré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, 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 une valeur de délai d'attente pour votre application supérieure à la valeur de délai d'inactivité de l'équilibreur de charge pour vous assurer que ce dernier 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 d'attente de lecture qui correspondent aux temps de réponse de votre application, de sorte que votre équilibreur de charge maintienne la connexion ouverte assez longtemps pour recevoir à la fois 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 utilisation optimale des ressources, définissez le nombre maximal 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. Dans ce cas, le socket TCP est dans un état « à moitié ouvert », où l'équilibreur de charge suppose que la connexion est établie alors qu'elle ne l'est pas au niveau de l'instance backend. 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.

Journalisation :
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

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 ?