2012-04-26 11 views
25

Vorrei sostituire il mio modulo node-http-proxy con il modulo proxy_pass nginx. E 'possibile con la nuova versione di nginx rilasciata, come ho letto, che supporta HTTP/1.1 fuori dalla scatola. Ho visto alcuni thread in conflitto con quel problema, che i websocket non sono supportati da nginx.nginx 1.2.0 - socket.io - HTTP/1.1 - Connessioni websocket proxy

Nel mio caso sono in esecuzione diversi progetti nodo in background e voglio instradare le mie connessioni web socket dalla porta 80 alla 8000-8100, a seconda del dominio. C'è un modo nativo per fare proxy websocket/reverse proxy senza usare l'addon tcp_module?

Ho provato a configurare un upstream in nginx.conf con proxy_passing, ma se provo a connettermi alla porta 80 su websocket, ottengo un errore di 502 Gateway.

Chiunque affronta lo stesso problema? Qualcuno ha un esempio funzionante per nginx + spcket.io, proxy sulla porta 80?

+0

Utilizzando questo addon è il modo nativo. – Dayo

+0

Sì, questo è possibile. Per risolvere il problema, sarebbe utile se tu includessi il tuo nginx.conf. – nil

risposta

34

No, questo non è ancora possibile; nginx 1.2 incorpora roba dal ramo di sviluppo 1.1.x che in effetti include il reverse proxy HTTP/1.1. Le connessioni Websocket sono stabilite usando l'intestazione "Upgrade" HTTP/1.1, ma il fatto che nginx ora supporti questo tipo di header non significa che supporti websockets (i websocket sono un protocollo diverso, non HTTP). (ho provato io stesso utilizzando il ramo 1.1.x (che ho trovato per essere abbastanza stabile per il mio scopo) e non funziona senza la tcp_module)

WebSockets sarà probabilmente supportato in 1.3.x (http://trac.nginx.org/nginx/roadmap) .

Le alternative sono:

  • continuare a utilizzare il nodo-http-proxy
  • uso nginx senza modulo tcp; socket.io non utilizzerà websocket ma qualcos'altro (ad esempio polling lungo)
  • nginx con modulo tcp: in questo caso penso che sia necessaria una porta aggiuntiva per questo modulo (non l'ho mai provato)
  • inserire qualcos'altro in front come proxy inverso: utilizzo HAProxy (che supporta websockets) di fronte a nginx e node. Nginx ora agisce semplicemente come un fileserver statico, non un proxy. La vernice è un'altra opzione, se si desidera aggiungere ulteriore memorizzazione nella cache.
+0

Thx per il chiarimento Matthias. Per me era naturale che nginx supporti websocket proxying se viene fornito con HTTP1/1 a bordo. So che non è un protocollo HTTP, ma ho ancora bisogno di fare i compiti :) – ayk

+0

Al momento della stesura di questo documento, Nginx 1.3 è stato rilasciato e supporta i websocket. È una configurazione piuttosto semplice che ho scritto [blogged about] (http://metacogni.tv/blog/2013/02/19/websockets-with-nginx-plus-ssl-also/) Spero che questo aiuti. – Octaflop

0

In relazione a NginX con il modulo TCP ci sono alcuni problemi che ho riscontrato. Ma il più difficile sta cercando di eseguire i tuoi web socket con nginx sulla porta 80 dell'istanza EC2.

ho descritto intera configurazione here