J'utilise une distribution Amazon CloudFront pour diffuser du contenu. Cependant, les utilisateurs reçoivent un message d'erreur 504 lorsqu'ils tentent d'accéder au contenu via un navigateur Web.
Résolution
CloudFront renvoie deux types d'erreurs 504 :
- Les erreurs « Gateway time-out » se produisent lorsque l'erreur est renvoyée par l'origine, puis transmise via CloudFront à l’utilisateur.
- Les erreurs « The request could not be satisfied » se produisent lorsque l'origine n'a pas répondu à CloudFront dans le délai imparti et que la requête a expiré.
Erreur 504 : « Gateway time-out »
Pour résoudre une erreur 504 provenant du serveur d'origine, effectuez les actions suivantes :
- Consultez les journaux du serveur d'origine pour identifier des erreurs ou des problèmes spécifiques.
- Assurez-vous que le serveur dispose de ressources suffisantes (processeur, mémoire, espace disque) pour traiter les requêtes entrantes.
- Ajustez les paramètres de délai d'attente du serveur afin de disposer de plus de temps pour traiter les requêtes. Passez également en revue et améliorez les requêtes de base de données.
- Vérifiez les problèmes de réseau ou les limites de bande passante sur votre serveur d'origine. Vérifiez également si votre fournisseur de services Internet (ISP) subit une panne. Contactez votre fournisseur de services Internet pour obtenir de l'aide et des mises à jour.
- Si votre application repose sur des services ou des API tiers, contactez l'équipe de support tierce. Vérifiez l’existence éventuelle de pannes ou de problèmes de service.
- Configurez desconnexions de longue durée sur votre serveur d'origine. Ces connexions persistantes contribuent à réduire la latence lorsque les connexions doivent être rétablies pour les requêtes suivantes.
- Si votre origine est un Application Load Balancer, corrigez l'erreur 504 de l'Application Load Balancer.
- Assurez-vous que votre origine est accessible sur l'Internet public. Si CloudFront ne peut pas accéder à votre serveur d'origine personnalisé parce qu'il n'est pas accessible au public sur Internet, CloudFront renvoie une erreur HTTP 504.
Pour plus d'informations, consultez la section Code de statut HTTP 504 (Gateway Timeout).
Erreur 504 : « The request could not be satisfied »
Vérifier que le serveur d'origine autorise les connexions depuis CloudFront
Assurez-vous que le serveur d'origine autorise le trafic entrant depuis CloudFront sur les ports 443, 80 ou sur un port personnalisé. Pour les origines d'Application Load Balancer ou d'Amazon Elastic Compute Cloud (Amazon EC2), utilisez la liste des préfixes gérés par CloudFront pour autoriser le trafic entrant vers les groupes de sécurité. Les groupes de sécurité doivent également autoriser les ports requis.
Vérifier si votre serveur d'origine est accessible via Internet
Si CloudFront ne parvient pas à accéder à votre origine via Internet, l'erreur 504 s'affiche. Pour plus d'informations sur la configuration HTTP et HTTPS, consultez la section Rendre votre serveur d'origine personnalisé accessible sur Internet.
Si vous utilisez un pare-feu, vérifiez que celui-ci autorise le trafic pour les ports 443 et 80
Si vous utilisez Red Hat Linux, pour consulter les règles de pare-feu existantes, exécutez la commande suivante :
sudo firewall-cmd --permanent --zone=public --list-ports
Pour autoriser le port 80 et le port 443, exécutez la commande suivante :
sudo firewall-cmd --permanent --zone=public --add-port=80/tcp
sudo firewall-cmd --permanent --zone=public --add-port=443/tcp
Si vous utilisez Ubuntu Linux, pour afficher les règles de pare-feu existantes, exécutez la commande suivante :
sudo ufw status verbose
Pour autoriser le port 80 et le port 443, exécutez la commande suivante :
sudo ufw allow 80
sudo ufw allow 443
Si vous utilisez un serveur Windows, consultez la page Ajouter ou modifier une règle de pare-feu sur le site Web de Microsoft.
Vérifier si les règles iptables bloquent la requête
Pour afficher les règles iptables existantes, exécutez la commande suivante :
sudo iptables -L -v -n
Pour autoriser le port 80 et le port 443, exécutez la commande suivante :
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
Vérifier la latence entre le serveur d'origine et CloudFront
Pour vérifier la latence entre l'origine et CloudFront, activez la métrique de latence d’origine.
Ou, pour mesurer la réactivité de votre application Web, exécutez la commande suivante :
curl -w "DNS Lookup Time: %{time_namelookup} \nConnect time: %{time_connect} \nTLS Setup: %{time_appconnect} \nRedirect Time: %{time_redirect} \nTime to first byte: %{time_starttransfer} \nTotal time: %{time_total} \n" -o /dev/null https://www.example.com/yourobject
Remarque : Remplacez https://www.example.com/yourobject par l'URL de votre page Web.
Vous obtiendrez une sortie de ce type :
DNS Lookup Time: 0.212319 Connect time: 0.371254
TLS Setup: 0.544175
Redirect Time: 0.000000
Time to first byte: 0.703863
Total time: 0.703994
Ajuster la valeur du délai d'expiration de l'origine dans CloudFront
Par défaut, CloudFront attend jusqu'à 30 secondes une réponse de l'origine (trois tentatives de connexion de 10 secondes chacune). Vous pouvez ajuster le délai de réponse de l'origine pour votre distribution.
Informations connexes
Limiter l'accès à vos origines à l'aide de la liste de préfixes gérée par AWS pour Amazon CloudFront