2010-07-13 4 views
6

J'ai une application serveur qui s'exécute dans le cloud Amazon EC2. Depuis mon client (le navigateur), je fais une requête HTTP qui télécharge un fichier sur le serveur qui traite ensuite le fichier. S'il y a beaucoup de traitement (grand fichier ), le serveur expire toujours avec une erreur de continuation backend 504 toujours exactement après 120 secondes. Bien que j'obtienne cette erreur, le serveur continue à traiter la demande et la termine (vérifiée en vérifiant la base de données) mais je ne peux pas voir le résultat final sur mon client à cause du délai d'expiration.Délai HTTP 504 après exactement 120 secondes

Je ne sais pas pourquoi cela se produit. Quelqu'un at-il fait face à un délai d'attente de 504 similaire? Y a-t-il un serveur proxy intermédiaire qui n'est pas sous mon contrôle et qui expire?

+0

Pourriez-vous résoudre le problème? – Tony

Répondre

0

il est possible que le navigateur expire pendant l'exécution du script.

1

En supposant que le code d'état correct est renvoyé, le problème est qu'un proxy intermédiaire expire. "Le serveur, tout en agissant comme une passerelle ou un proxy, n'a pas reçu une réponse rapide du serveur en amont spécifié par l'URI." (http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5.5) Cela indique probablement que le serveur d'origine rencontre un problème (c'est-à-dire qu'il prend beaucoup de temps pour traiter votre demande).), donc il ne répond pas rapidement. La meilleure solution est peut-être de réorganiser votre application serveur afin qu'elle réponde avec un code d'état "303 Voir autre"; alors votre client peut récupérer les données à un point de données ultérieur, une fois que le serveur a terminé le traitement et crée le résultat final. Edit: Une autre idée consiste à réorganiser votre application serveur afin qu'elle réponde avec un code d'état "413 Request Entity Too Large" lorsque la taille de l'entité de requête est trop grande. Cela va se débarrasser de l'erreur, mais il peut rendre votre application moins utile si elle ne peut traiter des fichiers « petits » «

Autres solutions possibles:.

  • Augmenter la valeur du délai d'attente du proxy (si elle est sous votre contrôle)
  • Faites votre demande à un autre serveur (s'il y a un autre, un serveur plus rapide avec la même application)
  • Faites votre demande différemment (si possible) de telle sorte que vous envoyez moins de données à un moment
+0

Des idées pour résoudre le problème? Mon serveur expire après 30 secondes. Même scénario, chargement de gros fichiers dans Amazon EC2 – Tony

+0

Autres que ceux répertoriés? Non désolé. –

5

J'ai un problème similaire et dans mon cas, je crois que cela est dû à la connexion entre Elastic Load Balancer (ELB) et l'instance EC2.

Pour une solution à long terme, je vais aller avec la réponse 303 Statut + traitement back-end suggéré par james.garriss ci-dessus. Pour une solution à court terme, le support Amazon peut augmenter le délai ELB (voir leur réponse dans https://forums.aws.amazon.com/thread.jspa?messageID=491594&#491594). Malheureusement, il ne semble pas y avoir de moyen de changer le timeout vous-même via API ou console.

[Mise à jour ] AWS ne vous permettent pas de mettre à jour le délai d'inactivité soit via la console, la configuration CLI ou .ebextensions. Voir http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/config-idle-timeout.html (merci @Daniel Patz pour la mise à jour)

+2

Il semble que vous pouvez maintenant configurer le délai d'attente vous-même maintenant: http://docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/config-idle-timeout.html –

Questions connexes