Des messages d'erreur HTTP 504 s'affichent dans les journaux d'accès d'Application Load Balancer, dans les métriques Amazon CloudWatch ou lorsque je me connecte à mon service par le biais d'un Application Load Balancer. Comment puis-je résoudre ce problème ?
Brève description
Une erreur HTTP 504 est un code d'état HTTP indiquant l'expiration d'une passerelle ou d'un proxy.
Des erreurs HTTP 504 liées à un Application Load Balancer peuvent survenir si :
- Votre équilibreur de charge n'a pas pu établir de connexion à la cible avant l'expiration du délai de connexion (10 secondes).
- L'équilibreur de charge a établi une connexion avec la cible, mais la cible n'a pas répondu avant l'expiration du délai d'inactivité.
- La liste ACL réseau pour le sous-réseau n'autorisait pas le trafic depuis les cibles vers les nœuds de l'équilibreur de charge sur les ports éphémères (1024-65535).
- La cible renvoie une valeur d'en-tête Content-Length supérieure au corps de l'entité. L'équilibreur de charge a expiré en attendant les octets manquants.
- La cible est une fonction AWS Lambda et le service n'a pas répondu avant l'expiration du délai de connexion.
Solution
Vérifiez le délai d'inactivité de vos équilibreurs de charge et modifiez-le si nécessaire.
Des erreurs HTTP 504 liées à un équilibreur de charge peuvent se produire si l'instance backend n'a pas répondu à la requête au cours du délai d'inactivité configuré. Par défaut, le délai d'inactivité d'un Application Load Balancer est de 60 secondes.
Si les métriques CloudWatch sont activées, vérifiez les métriques CloudWatch pour votre Application Load Balancer. La métrique HTTPCode_ELB_5XX indique que l'erreur 504 provient de l'équilibreur de charge. S'il n'existe aucun point de données de métrique HTTPCode_ELB_504_Count, les erreurs 504 sont renvoyées par vos serveurs d'applications et non par l'équilibreur de charge.
Vérifiez les valeurs maximales et moyennes de la métrique CloudWatch TargetResponseTime. La valeur de délai d'expiration peut indiquer le temps écoulé après que la requête de l'équilibreur de charge a été reçue par la cible.
Pour résoudre ce problème :
Modifiez le délai d'inactivité de votre équilibreur de charge pour que la requête HTTP se termine au cours de celui-ci.
-ou-
Modifiez votre application de manière à ce qu'elle réponde plus rapidement à la requête HTTP. Assurez-vous que l'application ne met pas plus de temps à répondre que le délai d'inactivité configuré.
(Facultatif) Ajoutez les filtres personnalisés suivants dans les journaux d'application des serveurs Web backend afin de déterminer la cause des temps de réponse élevés :
Serveur Web Apache
a- Apache : %D in log format
Serveur Web Nginx
b- Nginx: $request_time and $upstream_response_timein log format
Serveur web IIS
c- IIS: “time-taken” in log format
Serveur web Apache Tomcat
d- Apache Tomcat Access logs: %D in log format
Assurez-vous que votre équilibreur de charge autorise le trafic avec des cibles enregistrées
Vérifiez que les groupes de sécurité réseau associés à l'équilibreur de charge et aux cibles backend autorisent le trafic dans les deux directions sur les ports de trafic et de surveillance de l'état. Assurez-vous que la liste ACL réseau pour le sous-réseau autorise le trafic depuis les cibles vers les nœuds d'équilibreur de charge sur les ports éphémères (1024-65535).
Remarque : il est recommandé d'utiliser les règles de groupe de sécurité suivantes pour votre Application Load Balancer.
Si vous consultez la métrique CloudWatch TargetConnectionErrorCount avec des statistiques de somme, vous verrez très certainement des points de données positifs. Par exemple, le nombre de connexions qui n'ont pas été établies correctement entre l'équilibreur de charge et la cible.
Pour plus d'informations, consultez la section Configurer le délai d'inactivité à l'aide de la console.
Assurez-vous que votre fonction Lambda répond avant l'expiration du délai de connexion
Si votre cible est une fonction Lambda, vérifiez la durée de la métrique de performances avec des statistiques maximales afin de connaître la durée pendant laquelle l'événement est traité. Pour plus d'informations, veuillez consulter la section Utilisation des métriques de performances.
Informations connexes
HTTP 504 : Expiration de la passerelle
Comment résoudre les problèmes de latence élevée sur mon Application Load Balancer ?
Comment résoudre les problèmes de configuration de l'authentification dans mon Application Load Balancer ?
Comment résoudre les erreurs 504 qui s'affichent lorsque j'utilise un Classic Load Balancer ?