I am using Citrix load balancer.
Behind that , there is 4 virtual Nginx server. ip's 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 installed on test server located on 172.16.10.50.
I've created a subdomain for nodejs like sub.example.com.
My nodejs app is working on 8070 port.
I want to use Websocket not xhr-pooling. With my codes and configs below, In Chrome Console i saw that
Status Code:101 Switching Protocols
But Nothing appers on Frames. No push.
If i change socketURL to
var socketURL = http://172.16.10.50:8070
Websocket working without anyproblem in test platform (172.16.10.50).
But, In real Platform I have to use 'http://sub.example.com:8070';
If i set socket.io : 'transports', ['xhr-polling'] ; xhr-polling is working. But I want to use WebSocket.
nginx version: nginx/1.4.1
node v0.8.8
socket.io v0.9.16
What i should do?
Thank you.
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"
What version of nginx are you using? We ran into similar problems despite doing everything according to the docs. Turns out that our version (1.2.x) of nginx was (waaay) too old and didn't work properly, despite accepting the config without problems.
Updated to 1.4.4 and it worked fine!
By the way here's the config that we're using at the moment:
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;
}
}
Try to use the 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 the server responding (header) ? How does the request header looks like?
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With