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

Lecture de 4 minute(s)
0

Je souhaite utiliser une instance Amazon Elastic Compute Cloud (Amazon EC2) qui exécute Apache ou NGINX comme serveur dorsal pour Elastic Load Balancing (ELB). Je souhaite connaître les paramètres qui offrent les meilleures performances.

Résolution

Pour des performances optimales, analysez les temps de réponse de votre application dorsale et les exigences de vos clients.

Délai d'expiration de l'en-tête client

Si le serveur dorsal ferme une connexion et n'en informe pas l'équilibreur de charge, il se peut que vous receviez une erreur HTTP 502 pour un Application Load Balancer. Pour un Classic Load Balancer, vous obtenez une erreur HTTP 504.

Pour éviter les connexions inactives, définissez le délai d'expiration de votre application sur une valeur supérieure à la valeur du délai d'inactivité. Pour configurer le délai d'expiration de votre application pour Apache, consultez la page Directive TimeOut sur le site Web d'Apache. Pour NGINX, consultez la page client_header_timeout sur le site Web de NGINX.

Keepalive

Pour réduire l'utilisation du processeur et améliorer le temps de réponse, activez keepalive. Lorsque vous activez keepalive, l'équilibreur de charge n'établit pas de nouvelle connexion TCP pour chaque requête HTTP.

Pour activer keepalive pour Apache, consultez la page Directive KeepAlive sur le site Web d'Apache. Pour activer keepalive dans NGINX, définissez keepalive_disable sur aucun. Pour plus d'informations, consultez la page keepalive_disable sur le site Web de NGINX.

Lorsque vous activez l'option keepalive, choisissez un délai d'attente de keepalive plus long que le délai d'inactivité de l'équilibreur de charge. Pour configurer le délai d'attente dans Apache, consultez la page Directive KeepAliveTimeout sur le site Web d'Apache.Pour NGINX, consultez la page keepalive_timeout sur le site Web de NGINX.

Délais de lecture

Définissez des délais de lecture adaptés aux temps de réponse de votre application. L'équilibreur de charge doit maintenir la connexion ouverte suffisamment longtemps pour recevoir à la fois l'en-tête et le corps de la requête.

Remarque : Assurez-vous que la valeur du délai d'inactivité de l'équilibreur de charge est inférieure à celle du backend.

Pour définir le délai de lecture de la requête dans Apache, consultez la page Directive RequestReadTimeout. Pour définir le délai d'expiration de l'en-tête client dans NGINX, consultez la page client_header_timeout sur le site Web de NGINX. Pour le délai d'expiration du corps client dans NGINX, consultez la page client_body_timeout sur le site Web de NGINX.

Nombre maximal de requêtes keepalive

Lorsque vous activez keepalive, définissez le nombre de requêtes traitées par une seule connexion TCP à 100 ou plus. Pour définir le numéro de requête dans Apache, consultez la page Directive MaxKeepAliveRequests sur le site Web d'Apache. Pour NGINX, consultez la page keepalive_requests sur le site Web de NGINX.

AcceptFilter

Par défaut, AcceptFilter est activé. AcceptFilter indique à Apache d'utiliser l'option TCP_DEFER_ACCEPT pour les connexions, ce qui peut entraîner le maintien du socket TCP à l'état semi-ouvert. Lorsque le socket TCP reste à l'état semi-ouvert, l'équilibreur de charge suppose que la connexion est établie, mais l'instance dorsale ne l'établit pas complètement. Les connexions semi-ouvertes sont plus courantes dans les équilibreurs de charge à faible volume où les connexions restent inactives avant utilisation.

Pour configurer AcceptFilter dans Apache, consultez la page Directive AcceptFilter sur le site Web d'Apache. Pour NGINX, consultez la page listen sur le site Web de NGINX.

Journalisation

Pour activer l'option %{X-Forwarded-For}i afin qu'Apache affiche l'en-tête ELB x-forwarded-for dans ses journaux pour chaque requête, exécutez la commande suivante :

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

L'en-tête ELB x-forwarded-for contient l'adresse IP du client d'origine. L'option %D ajoute le temps nécessaire pour terminer chaque requête dans les journaux d'accès.

MPM Apache

Le module multi-processus d’événement (MPM) Apache peut fermer prématurément les connexions des équilibreurs de charge et provoquer une erreur HTTP 502 pour un Application Load Balancer. Pour un Classic Load Balancer, vous obtenez une erreur HTTP 504.

Il est recommandé d'utiliser le MPM worker à la place.

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

Informations connexes

Instances enregistrées pour votre Classic Load Balancer

Configurer votre Classic Load Balancer

AWS OFFICIELA mis à jour il y a 17 jours