504 Gateway Timeout - Deux instances EC2 avec équilibreur de charge
Ce pourrait être l'impossible question. J'ai tout essayé. Je me sens comme il ya un gars à un tableau quelque part, en faisant tournoyer sa moustache.
Le problème:
J'ai Amazon EC2 exécutant une application. Il fonctionne sans problème quand il y a une seule instance et sans équilibrage de charge.
Mais dans mon environnement de production, j'ai deux identiques instances en cours d'exécution derrière un répartiteur de charge et lors de l'exécution de certaines tâches, comme une fonction qui génère un fichier PDF et le joint à un courriel, il ne se passe rien du tout, et lors de l'utilisation de Google outils pour les Développeurs avec l'onglet Réseau, j'obtiens l'erreur "504 Gateway Timeout" une fois le délai d'attente de hits (je l'ai fixé à 30 secondes).
Ma Base de données externe, sur Amazon RDS.
Je pense.... Si je pouvais forcer un client à rester connectés à leurs initiale de serveur connecté à, ce problème pourrait être résolu, parce que c'est ma compréhension que les 504 Gateway Timeout qui se passe lors de l'instance-1 tente d'atteindre instance-2 pour effectuer la tâche.
Cela se produit UNIQUEMENT LORS de l'utilisation de l'Équilibrage de la Charge, mais jamais lors de la connexion directement dans l'un de mes deux serveurs.
Équilibrage De La Charge De Paramètres:
- L'équilibreur de charge a une CRECORD sur mon Greffier, de sorte que app.myapplication.com points à myloadbalancerDNSname.elb.amazonaws.com
- L'équilibreur de charge a 2 sain, chacune dans la même région, mais ils sont dans différentes zones de disponibilité.
- Le programme d'équilibrage de charge en utilisant les mêmes Groupes de Sécurité comme les Instances (permettre à TOUTES les adresses ip sur les ports 22, 80 et 443)
- L'équilibreur de charge a la croix de la zone d'équilibrage de charge allumé.
- De la SCRO (Amazon S3) est activé pour GET, POST, PUT, DELETE de * à * (je n'ai aucune idée de comment cela est associé à mon cas, mais de toute façon, je n'ai que les instructions dit)
- L'équilibreur de charge a des auditeurs configuré en tant que tel:
-
- Équilibrage de la charge de Protocole:HTTP Équilibreur de Charge Port:80 Exemple de Protocole:HTTP Instance de Port:80
-
- Équilibrage de la charge de Protocole:HTTPS Équilibrage de la Charge de Port:443 Exemple de Protocole:HTTP Instance de Port:80 (cipher correctement choisi par mon Cert fournisseur, et les champs SSL 100% sûrement correct)
Quelques autres idées:
Cela étant dit, je ne suis pas en essais avec HTTPS, mais c'est normal l'adresse HTTP à la place. Je ne suis pas convaincu SSL est installé correctement, même si mon fournisseur de certificats a dit qu'il est. La raison pour laquelle je me méfie, c'est que lorsque j'essaie de clé dans https://app.myapplication.com j'obtiens l'erreur "(échec) net::ERR_CONNECTION_CLOSED" dans Google Outils pour les Développeurs, dans l'onglet Réseau. Mais cela doit être non applicable parce que je vais avoir le même problème, même en utilisant HTTP. Je peux dépanner SSL plus tard.
Donc pour résumer, mon problème est d'avoir la "504 Gateway Timeout" problème lors de l'utilisation de certaines fonctions, mais aussi, parfois, au hasard, au lieu de chargement de la page (mais rarement). Cette 504 problème se produit UNIQUEMENT LORS de l'utilisation de l'Équilibrage de la Charge, mais jamais lors de la connexion directement dans l'un de mes deux instances.
Je ne sais pas qui de se poser la question, parce que j'ai Suivi tous les documents pour le T, double et triple vérifié toutes les suggestions sur le web et de RIEN.
source d'informationauteur user3035649 | 2014-10-24
Vous devez vous connecter pour publier un commentaire.
Ce serveur web utilisez-vous? J'ai eu un problème similaire avec nginx et AWS équilibrage de la charge. J'ai ajouté
keepalive_timeout 75s;
à l'adresse http bloc dans mon fichier de configuration de nginx et n'avez pas voir le problème depuis.Assurez-vous de redémarrer nginx après vous ajouter et enregistrer cette ligne (sur ubuntu
sudo service nginx restart
. Sur redhat arrêter de nginx/path/to/nginx/executable -s stop
puis/path/to/nginx/executable
pour le démarrage de nginx)Ce correctif a été recommandé par AWS sur leur page d'aide AWS équilibrage de la Charge de dépannage
Tout d'abord, qu'est-ce que le Délai d'Inactivité de votre ELB ensemble? Vous trouverez au bas de l'onglet "Description" pour votre équilibreur de charge. Vous pouvez en lire plus sur le délai d'inactivité ici, dans la ELB documentation. La valeur par défaut est de 60 secondes. Vous devriez aussi envisager de mettre ou l'augmentation de Keep-alive dans votre serveur web. Comment vous faites cela dépendra de ce serveur web que vous utilisez.
Deuxième, si vous pensez que c'est dû au client de passer d'une instance à l'autre, alors vous devriez activer session de la viscosité dans la ELB. Cela permettra d'assurer que le client est toujours le même back-end de l'instance par l'équilibreur de charge. Pour ce faire, allez à l'onglet "Description", puis cliquez sur le lien Modifier à côté de chaque entrée dans la section de Configuration du Port. Vous aurez probablement envie de choisir "Activer l'Équilibrage de Charge de Cookie Généré Adhérence" option, car qui dira le ELB, pour gérer tous les aspects de la viscosité.
Dans mon cas, il s'avère qu'il n'y a pas de problème avec l'équilibrage de charge. La solution finale, finissant Ubuntu fichier hosts dans lequel il y avait une inexplicable entrée pour acheminer le trafic de certains mystère IP de ma demande, le nom d'hôte. Ainsi, au cours du processus de création du PDF, les chemins étaient de se faire re-écrite par le générateur de PDF à pointer du doigt le mystère serveur, et par conséquent la Passerelle problèmes de délai d'attente. Je n'ai aucune idée de pourquoi il était parfois travail et de ne pas échouer.
C'est ce à quoi il ressemblait, donc j'ai supprimé cette troisième ligne et tous les engrenages a commencé à tourner à nouveau. 😛
Nous utilisons des instances Amazon EC2 derrière Amazon ELB et nous commencions à 504 GATEWAY_TIMEOUT erreurs. Nous utilisons Apache et PHP sur Ubuntu serveurs web.
Dans notre cas, l'erreur était due à l'serveurs à court de mémoire. Nous n'avons pas vu le "out of memory" dans notre Apache journaux d'erreur. Il y avait une 504 entrée de ligne dans le Apache journaux d'accès. Nous avons confirmé la "mémoire" en regardant dans le fichier syslog ( /var/log/syslog ) et fixe le problème de mémoire.
Cette résolu l'erreur 504 pour nous.
De sécurité de contrôle les groupes de paramètres. Le port 80 peut être limitée à l'accès.