Node.js Socket.io WebSocket Nginx Configuration?

I use Citrix load balancing.

There are 4 virtual Nginx servers for this. ip like 172.16.10.40, 172.16.10.41, 172.16.10.42, 172.16.10.43

And 1 test server 172.16.10.50.

Nodejs is installed on a test server located at 172.16.10.50.

I created a subdomain for nodejs like sub.example.com.

My nodejs app works with port 8070.

I want to use a Websocket, not an xhr union. With my codes and configurations below, in the Chrome Console, I saw that

Status Code:101 Switching Protocols 

But nothing appears on frames. No clicking.

If I changed socketURL to

 var socketURL = http://172.16.10.50:8070 

Websocket works without any problems in the test platform (172.16.10.50).

But in a real platform, I have to use http://sub.example.com:8070 ';

If I install socket.io: 'transports', ['xhr-polling']; xhr polling works. But I want to use WebSocket.

  nginx version: nginx/1.4.1 node v0.8.8 socket.io v0.9.16 

What should I do?

Thanks.

app.js

 var app = server = require('http').createServer(app) , io = require('socket.io').listen(server,{ log: false }) , url = require('url') , http= require('http') ,redis = require("redis"); //io.set('transports', ['xhr-polling']); var livefeed = redis.createClient(); server.listen(8070); livefeed.on("message", function(channel, message){ console.log("%s, the message : %s", channel, message); io.sockets.in(channel).emit(channel,message); }); io.sockets.on('connection', function (socket) { console.log("["+socket.id+"] connected"); socket.on('subscribe', function (data) { //console.log("joining : %s",data.channel); socket.join(data.channel); }); socket.on('unsubscribe', function(room) { //console.log('leaving room', room); socket.leave(room); }); socket.on('disconnect', function (socket) { connected_socket--; console.log("Client disconnected"); SocketCount(); }); }); 

example.js

 var socketURL = 'http://sub.example.com:8070'; var socket = false; var BKSocket = { connectSocket : function(){ if(socket === false){ try{ socket = io.connect(socketURL,{'connect timeout': 1000}); }catch(e){ socket = false; } } }, livefeeds:function(){ this.connectSocket(); if(socket !== false){ socket.on('connect', function(data){ socket.emit('subscribe', {channel:'livefeed'}); }); socket.on('livefeed', function (data) { console.log(data); }); } } } 

nginx Config

 upstream backend { server 127.0.0.1:8070; } map $http_upgrade $connection_upgrade { default upgrade; '' close; } server { listen 80; server_name sub.example.com; #server_name _; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-NginX-Proxy true; proxy_pass http://backend/; proxy_redirect off; #proxy_http_version 1.1; #proxy_set_header Upgrade $http_upgrade; #proxy_set_header Connection $connection_upgrade; access_log off; error_log /var/log/nginx/sub.example.com.error.log; } } 

error.log

 2013/11/25 09:40:08 [error] 29812#0: *25900 upstream prematurely closed connection while reading response header from upstream, client: 172.16.10.10, server: v2.bitenekadar.com, request: "GET /socket.io/1/websocket/NPXo9XDAKbAapgpyLqCd HTTP/1.1", upstream: "http://172.16.10.50:8070/socket.io/1/websocket/NPXo9XDAKbAapgpyLqCd", host: "v2.bitenekadar.com" 2013/11/25 09:41:36 [error] 29812#0: *26046 upstream prematurely closed connection while reading response header from upstream, client: 172.16.10.10, server: v2.bitenekadar.com, request: "GET /socket.io/1/websocket/RxBjIryz50FjUs1RLqCe HTTP/1.1", upstream: "http://172.16.10.50:8070/socket.io/1/websocket/RxBjIryz50FjUs1RLqCe", host: "v2.bitenekadar.com" 2013/11/25 09:42:10 [error] 29812#0: *26046 upstream prematurely closed connection while reading response header from upstream, client: 172.16.10.10, server: v2.bitenekadar.com, request: "GET /socket.io/1/websocket/ZMuHPZgFcOGmULNdNStr HTTP/1.1", upstream: "http://172.16.10.50:8070/socket.io/1/websocket/ZMuHPZgFcOGmULNdNStr", host: "v2.bitenekadar.com" 2013/11/25 09:43:17 [error] 29812#0: *26063 upstream prematurely closed connection while reading response header from upstream, client: 172.16.10.10, server: v2.bitenekadar.com, request: "GET /socket.io/1/websocket/J3qPn40WioPviZZMNSts HTTP/1.1", upstream: "http://172.16.10.50:8070/socket.io/1/websocket/J3qPn40WioPviZZMNSts", host: "v2.bitenekadar.com" 2013/11/25 09:45:23 [error] 29812#0: *26181 upstream prematurely closed connection while reading response header from upstream, client: 172.16.10.10, server: v2.bitenekadar.com, request: "GET /socket.io/1/websocket/CtOaZ65Dq7dAX6jEOAap HTTP/1.1", upstream: "http://172.16.10.50:8070/socket.io/1/websocket/CtOaZ65Dq7dAX6jEOAap", host: "v2.bitenekadar.com" 
+4
source share
2 answers

What version of nginx are you using? We faced similar problems, despite the fact that we did everything in accordance with the documents. It turns out that our version (1.2.x) nginx was (waaay) too old and did not work properly, despite the fact that it accepted the configuration without any problems.

Updated to 1.4.4 and it works great!

By the way, the configuration that we are currently using:

 upstream devserver_pc { server localhost:9003; } server { listen 80; root /vagrant/pc/static; index index.html index.htm; access_log /var/log/nginx/pc.access.log; error_log /var/log/nginx/pc.error.log; server_name pc.bvb-infotainment.vm; client_max_body_size 20M; location /static { alias /vagrant/pc/static; } location /socket.io/websocket { proxy_pass http://devserver_pc; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } location / { proxy_http_version 1.1; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-NginX-Proxy true; proxy_set_header Host $http_host; proxy_set_header Upgrade $http_upgrade; proxy_redirect off; proxy_pass http://devserver_pc; } } 
+7
source

Try using proxy_set_header:

 server { listen 80; server_name app.local; root /home/app/public; passenger_enabled on; rails_env development; location /any_location { proxy_pass http://localhost:3001/realtime_page; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } } 

http://blog.joshsoftware.com/2013/05/28/websocket-over-nginx/

What is a server response (header)? What does the request header look like?

+1
source

Source: https://habr.com/ru/post/1495108/


All Articles