2012-03-28 25 views
4

Derzeit ist es schwierig, die meisten Reverse-Proxies (nginx, HAproxy) im Umgang mit Web-Sockets zu umgehen. Ich dachte, dass es möglich sein könnte, so etwas zu tun:nginx und socket.io Problemumgehung

io.connect("http://yourdomain:8080/chat"); // with namespace 

So ein Beispiel-Workflow wäre:

  • nginx Streams auf Port 80
  • NodeJS Streams auf Port 8080
  • socket.io hört Port 8080 durch nodejs App
  • ab
  • nginx Proxies alle Anfragen an Port 80 über NodeJS auf 8080
  • socket.io Client eine Verbindung zu Knoten/Socket-Server direkt auf Port 8080 und kommuniziert direkt ohne Mitwirkung eines Reverse-Proxy

Ich kann es nicht funktionieren lassen - ist das nicht möglich, oder mache ich etwas falsch?

EDIT: Dies funktioniert tatsächlich, mein Problem war MongoDB _id Felder an den Client senden.

Ich schrieb eine ausführlichere Beschreibung here

+0

Haben Sie sich die Option ['proxy_buffering'] (http://wiki.ninx.org/HttpProxyModule#proxy_buffering) angeschaut? – SingleNegationElimination

+0

meine (nicht akzeptierte) Antwort Siehe [eine frühere Frage] [1] [1]: http://stackoverflow.com/questions/9749070/nginx-redirect-http-request-to-tcp/ 9749368 # 9749368 – Dayo

+0

Danke für die Kommentare! Was ich versuchte, war, herumzukommen und irgendwelche Anpassungen an nginx vornehmen zu müssen. Eigentlich funktioniert der obige Code, das Problem war mit mongoDB. Sie können also tatsächlich einen Port in der socket.io connect angeben und ihn vollständig um nginx routen. –

Antwort

0

ich mit NGINX 1.3 möglich sein sollte, wenn es freigegeben wird. Version 1.2 hinzugefügt Unterstützung für HTTP/1.1-Protokoll, das wesentliche fehlende Stück war.