Node.js Socket.io WebSocket de Configuration de Nginx?
Je suis à l'aide de Citrix équilibreur de charge.
Derrière cela , il y a 4 virtual serveur Nginx.
ip est comme 172.16.10.40, 172.16.10.41, 172.16.10.42, 172.16.10.43
Et 1 serveur de test
172.16.10.50.
Nodejs installé sur le serveur de test situé sur 172.16.10.50.
J'ai créé un sous-domaine pour nodejs comme sub.example.com.
Mon nodejs application fonctionne sur 8070 port.
Je veux utiliser Websocket pas xhr-mise en commun.
Avec mes codes et des configs ci-dessous, En Chrome de la Console, j'ai vu que
Status Code:101 Switching Protocols
Mais Rien appers sur des Cadres. Pas de pression.
Si je change socketURL à
var socketURL = http://172.16.10.50:8070
Websocket de travail sans anyproblem dans la plate-forme de test (172.16.10.50).
Mais, Dans la vraie Plate-forme, je dois utiliser"http://sub.example.com:8070';
Si j'ai mis socket.io : 'transports', ['xhr-polling'] ;
xhr-interrogation est de travail. Mais je veux l'utiliser WebSocket.
nginx version: nginx/1.4.1
node v0.8.8
socket.io v0.9.16
Ce que je dois faire?
Merci.
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;
}
}
erreur.journal
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"
OriginalL'auteur orhan bengisu | 2013-08-03
Vous devez vous connecter pour publier un commentaire.
Quelle version de nginx utilisez-vous? Nous avons rencontré des problèmes similaires en dépit de tout faire selon les docs. S'avère que notre version (1.2.x) de nginx a été (waaay trop vieux et ne fonctionne pas correctement, en dépit de l'acceptation de la config sans problèmes.
Mis à jour 1.4.4 et il a bien fonctionné!
Par la façon dont voici la config que nous utilisons à l'heure actuelle:
ce qui est en amont?
OriginalL'auteur Dave Vogt
Essayez d'utiliser la proxy_set_header:
http://blog.joshsoftware.com/2013/05/28/websocket-over-nginx/
Qu'est-ce que le serveur de répondre (en-tête) ? Comment l'en-tête de requête ressemble?
Avez-vous réussi à le résoudre? Je vais avoir le même en amont d'erreur, même si je suis à l'aide d'Apache.
aussi avoir ce problème à l'aide d'une douille.io, nodejs (6.10.2) et nginx (dernière version stable: 1.11.13)
OriginalL'auteur Michael