2013-04-09 2 views
28

Ich versuche einen Websocket-Server mit socket.io auf AWS Elastic Beanstalk einzurichten. Haben Sie die ursprüngliche Anforderung an /socket.io/1/?t=xxxx und läuft, aber der websocket Handshake schlägt mit diesem Fehler:Websockets mit socket.io auf AWS Elastic Beanstalk

WebSocket connection to 'ws://xxxxxx.elasticbeanstalk.com/socket.io/1/websocket/a4DTCN2BeJZuiSaphVyz' failed: Unexpected response code: 502 

Von googeln und Blick auf den Fehler 502 (Bad Gateway) es scheint etwas mit dem nginx-proxy zu tun haben. Wie konfiguriere ich das nginx um mit Websockets zu arbeiten?

In der AWS-Dokumentation kann nichts über das Einrichten von Websockets gefunden werden.

+3

Haben Sie es funktioniert, indem Sie den Proxy von Nginx auf keine ändern. – funparko

+1

Ich habe auch das gleiche Problem berichtet (die gefürchteten) "Fehler beim WebSocket-Handshake: Unerwarteter Antwortcode: 400" – Jason

Antwort

26

Sie könnten versuchen, durch die Probleme der Konfiguration von nginx zu gehen, aber wenn Sie nur websockets verwenden, wäre es einfacher, alle proxys auszuschalten und direkt zu verbinden.

Dies ist unter Ihrer App-Umgebung in der elastischen Bohnenstange Dashboard. Es gibt einen Drop-Down-Button auf der rechten Seite mit der Aufschrift "Actions". Wählen Sie „Bearbeiten/Konfiguration laden“

enter image description here

+5

Ab dem 2014-04-13 befindet sich dies unter: //Konfiguration/Softwarekonfiguration/Containeroptionen. – Rob

+0

Bedeutet "leichter" auch besser? Wie kommt es, wenn Sie den Proxy-Server auf nginx setzen (neben statischen Dateizuordnungen und gzip-Komprimierung, die ich nicht brauche). Was ist mit Leistung und Sicherheit? Ich würde vermuten, dass die Leistung ohne Proxy-Server besser ist. Aber was ist mit Sicherheit? Ist nginx besser für WSS (WebSockets über SSL/TLS), oder sollte ich einfach [SSL with Node.js] (https://github.com/einaros/ws/blob/master/examples/ssl.js) implementieren? Was ist mit DoS-Schutz? Noch etwas? – ma11hew28

+1

Ich habe Proxy-Server ausgeschaltet, aber ich bekomme einen Fehler Verbindung ist geschlossen, bevor es eingerichtet ist, Frage hier gepostet: http://StackOverflow.com/Questions/26880396/Socket-io-error-Web-Socket-connection- is-closed-before-the-connection-is-est – user2727195

4

Es gibt einen erheblichen Nachteil mit dem Graben-nginx Ansatz. Sie müssen https in den Knoten und auch in Ihre socket.io-Aufrufe verschieben. Es ist viel einfacher, https in der Serverkonfiguration als in Knoten zu verwalten.

Wenn Sie keine https benötigen, schlage ich vor, den Proxy zu dumpen und direkt zum Knoten zu gehen.

+6

Das ist falsch, Sie können ein Zertifikat direkt auf dem Load Balancer hinzufügen. –

3

Standardmäßig verwendet Socket.io Port 8080. Stellen Sie sicher, dass der Port 8080 in der EC2-Sicherheitsgruppe aktiviert ist, indem Sie eine "Eingehende> Benutzerdefinierte TCP-Regel" in AWS Admin> EC2> Sicherheitsgruppen hinzufügen.