Meteor WebSocket poignée de main d'erreur 400 avec nginx
J'ai réussi à déployer meteor sur mon infrastructure (Webfactions).
L'application semble fonctionner très bien, mais j'obtiens l'erreur suivante dans le navigateur de la console lors de mon application démarre:
WebSocket connection to 'ws://.../websocket' failed: Error during WebSocket handshake: Unexpected response code: 400
Je devrais modifier la question ?
OriginalL'auteur gpasse | 2013-06-09
Vous devez vous connecter pour publier un commentaire.
WebSockets sont rapides et vous n'avez pas à (et ne devrait pas) de les désactiver.
La véritable cause de cette erreur est que Webfactions utilise nginx, et nginx a été mal configuré. Voici comment correctement configurer nginx pour proxy WebSocket demandes, par la mise en
proxy_set_header Upgrade $http_upgrade;
etproxy_set_header Connection $connection_upgrade;
:C'est une amélioration de nginx configuration basée sur David Weldon la config nginx. Andrew Mao a atteint un configuration très similaire.
N'oubliez pas aussi de définir la HTTP_FORWARDED_COUNT variable d'environnement pour le nombre de procurations devant de l'application (généralement 1).
Serait bien d'avoir aussi cette pour Apache.
Super réponse! Je vous remercie beaucoup. J'ai perdu 2 jours avec apache pour obtenir websocket de travail - j'ai échoué. Que j'ai trouvé cette réponse et après le passage à nginx, tout a commencé à travailler presque immédiatement.
Ce doit être la accepté de répondre!
génial! merci Dan, fonctionne à merveille.
OriginalL'auteur
si vous recevez cette erreur côté client dans le navigateur de la console, vous pouvez ignorer en toute sécurité - cela signifie que votre hébergement ne supporte pas les websockets et meteor de secours à l'aide d'interrogation à la place
meteor applications déployées à heroku ou toute autre plate-forme sans les websockets obtiendrez la même erreur
mise à jour:
comme de meteor v0.6.4 vous pouvez maintenant définir la variable d'environnement
DISABLE_WEBSOCKETS
pour empêcher cette tentative de se produire si vous savez qu'il va échouerhttps://github.com/meteor/meteor/blob/devel/History.md
je ne DISABLE_WEBSOCKETS=vrai - assez sûr quelle valeur travail, vu le météore verbage - tout doit être définie comme une variable d'environnement
merci man, parfait.
La haine de downvote, mais vous n'avez pas besoin de désactiver les Websockets
Downvote - désolé. Cette réponse est juste incorrectement marqué comme meilleure réponse qui n'est pas le vrai. Bien meilleure réponse est de Dan Dascalescu, qui décrit comment configurer nginx pour obtenir Websocket de travail. Veuillez vous référer à cette réponse: stackoverflow.com/a/22750356/581768
OriginalL'auteur
Concernant le RÉFÉRENCEMENT: l'échec d'une websocket (code 400) empêche également Phantomjs pour obtenir un bon pageload (et n'est pas terminé).
Dans mon cas, la nouvelle configuration de Nginx Dan empêche de l'échec de la websockets et vous permet de Phantomjs charger la page.
OriginalL'auteur
Trouvé ceci dans ma recherche de cette erreur lors de l'utilisation d'AWS Elastic Load Balancer. Définition de la variable d'environnement fonctionne, mais la meilleure solution est d'utiliser le protocole TCP sur le ELB au lieu de HTTPS. FYI.
OriginalL'auteur