2012-04-26 7 views
25

Ich möchte mein Node-HTTP-Proxy-Modul durch das Nginx-Proxy-Pass-Modul ersetzen. Ist es möglich mit der neuen Version von Nginx, wie ich gelesen habe, dass es HTTP/1.1 sofort unterstützt. Ich sah einige Threads, die mit diesem Problem kämpften, dass Websockets von nginx nicht unterstützt werden.nginx 1.2.0 - socket.io - HTTP/1.1 - Proxy-Websocket-Verbindungen

In meinem Fall laufe ich mehrere Knoten Projekte im Hintergrund und möchte meine Websocket-Verbindungen von Port 80 zu 8000-8100, abhängig von der Domäne routen. Gibt es eine native Möglichkeit, Websocket-Proxy/Reverse-Proxy ohne Verwendung des tcp_module-Addons zu machen?

Ich habe versucht, eine Upstream in nginx.conf mit proxy_passing, aber wenn ich versuche, eine Verbindung zu Port 80 über Websocket, ich bekomme einen 502 Gateway-Fehler.

Wer hat das gleiche Problem? Hat jemand ein funktionierendes Beispiel für nginx + spcket.io, Proxying über Port 80?

+0

, dass Add-on Unter Verwendung des nativen Weg ist. – Dayo

+0

Ja, das ist möglich. Um Fehler zu beheben, wäre es hilfreich, wenn Sie Ihre nginx.conf einbinden. – nil

Antwort

34

Nein, das ist noch nicht möglich; nginx 1.2 enthält Dinge aus dem 1.1.x-Entwicklungszweig, der in der Tat HTTP/1.1-Reverse-Proxying beinhaltet. Websocket-Verbindungen werden mithilfe des HTTP/1.1-Headers "Upgrade" hergestellt, aber die Tatsache, dass nginx jetzt diese Art von Headern unterstützt, bedeutet nicht, dass es Websockets unterstützt (Websockets sind ein anderes Protokoll, nicht HTTP). (Ich habe versucht, das selbst den 1.1.x-Zweig mit (was ich für meinen Zweck stabil genug erwiesen) und es funktioniert nicht ohne die tcp_module)

Websockets wird wahrscheinlich in 1.3.x unterstützt werden (http://trac.nginx.org/nginx/roadmap) .

Ihre Alternativen sind:

  • keep mit node-http-Proxy
  • Verwendung nginx ohne TCP-Modul; socket.io verwendet keine Websockets, sondern etwas anderes (zB Long Polling)
  • nginx mit tcp-modul: in diesem fall glaube ich, dass du einen zusätzlichen port für dieses modul brauchst (hab das nie selbst ausprobiert)
  • etwas anderes reinlegen Front als Reverse-Proxy: Ich benutze HAProxy (die Websockets unterstützt) vor nginx und node. Nginx fungiert nun einfach als statischer Dateiserver und nicht als Proxy. Varnish ist eine weitere Option, wenn Sie zusätzliches Caching wünschen.
+0

Danke für die Klarstellung Matthias. Für mich war es natürlich, dass nginx Websocket Proxying unterstützt, wenn es mit HTTP1/1 an Bord kommt. Ich weiß, dass es nicht HTTP-Protokoll, aber immer noch Nähte, die ich brauche, um einige Hausaufgaben zu machen :) – ayk

+0

Zum Zeitpunkt der Erstellung wurde Nginx 1.3 veröffentlicht und unterstützt Websockets. Es ist eine ziemlich einfache Konfiguration, über die ich [bloggte] (http://metacogni.tv/blog/2013/02/19/webessockets-with-nginx-plus-ssl-also/) Hoffe, dass hilft. – Octaflop

0

In Bezug auf NginX mit TCP-Modul gibt es einige Probleme, die ich angetroffen habe. Aber das schwierigste versucht, Ihre WebSockets mit Nginx auf Port 80 auf EC2-Instanz auszuführen.

I beschrieben gesamte Konfiguration here