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:
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;
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"