Balance de charge dans Nodejs via nginx en utilisant redis comme stockage de session

J’ai essayé d’équilibrer la charge dans Nodejs via nginx en utilisant redis comme stockage de session.

J’utilise 3 machine

  1. Machine A (192.168.14.65) – Nginx, Redis est installé
  2. Machine B (192.168.14.92) – nodejs est installé
  3. Machine C (192.168.9.9) – nodejs est installé

Je mets une variable de session dans la machine B et j’essaie d’accéder à la même variable de session via la machine C.

J’utilise Redis comme stockage de session, je devrais donc accéder à la variable dans la machine B.

Le codage de la machine B est (nom du fichier comme app.js)

var express = require('express'); var redis = require("redis"); var session = require('express-session'); var redisStore = require('connect-redis')(session); var bodyParser = require('body-parser'); var client = redis.createClient(); var app = express(); app.use(session({ secret: 'ssshhhhh', // create new redis store. store: new redisStore({ host: '192.168.14.65', port: 6379, client: client,ttl : 260}), saveUninitialized: false, resave: false })); app.get('/', function (req, res) { console.log(req.session); req.session.helloworld = 'helloworld'; res.send('set session'); }); app.listen(3000,function(){ console.log("App Started on PORT 3000"); }); 

le codage pour la machine C est (nom de fichier comme app.js)

 var express = require('express'); var redis = require("redis"); var session = require('express-session'); var redisStore = require('connect-redis')(session); var bodyParser = require('body-parser'); var client = redis.createClient(); var app = express(); app.use(session({ secret: 'ssshhhhh', // create new redis store. store: new redisStore({ host: '192.168.14.65', port: 6379, client: client,ttl : 260}), saveUninitialized: false, resave: false })); app.get('/', function (req, res) { if(req.session.helloworld) { res.send('get session: '+ req.session.helloworld); } else { res.send('no session: '); } }); app.listen(3000,function(){ console.log("App Started on PORT 3000"); }); 

et j’ai package.json dans les deux machines

code package.json

 { "name": "Node-Session-Redis", "version": "0.0.1", "scripts": { "start": "node ./bin" }, "dependencies": { "async": "^1.2.1", "body-parser": "^1.13.0", "connect-redis": "^2.3.0", "cookie-parser": "^1.3.5", "ejs": "^2.3.1", "express": "^4.12.4", "express-session": "^1.11.3", "mysql": "^2.7.0", "redis": "^0.12.1" } } 

Je lance le code en utilisant la commande

 node app.js 

Tout fonctionne bien dans la machine B.

mais je reçois une erreur dans la machine C.

 TypeError: Cannot read property 'helloworld' of undefined at /home/local/PAYODA/balachandran.v/js/app.js:19:17 at Layer.handle [as handle_request] (/home/local/PAYODA/balachandran.v/js/node_modules/express/lib/router/layer.js:95:5) at next (/home/local/PAYODA/balachandran.v/js/node_modules/express/lib/router/route.js:131:13) at Route.dispatch (/home/local/PAYODA/balachandran.v/js/node_modules/express/lib/router/route.js:112:3) at Layer.handle [as handle_request] (/home/local/PAYODA/balachandran.v/js/node_modules/express/lib/router/layer.js:95:5) at /home/local/PAYODA/balachandran.v/js/node_modules/express/lib/router/index.js:277:22 at Function.process_params (/home/local/PAYODA/balachandran.v/js/node_modules/express/lib/router/index.js:330:12) at next (/home/local/PAYODA/balachandran.v/js/node_modules/express/lib/router/index.js:271:10) at session (/home/local/PAYODA/balachandran.v/js/node_modules/express-session/index.js:159:61) at Layer.handle [as handle_request] (/home/local/PAYODA/balachandran.v/js/node_modules/express/lib/router/layer.js:95:5) 

Lorsque j’ai essayé req.session dans la console, j’ai eu une erreur dans la machine B Erreur B.

 { cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true } } 

Erreur machine c

 undefine 

Quelqu’un peut-il s’il vous plaît me dire où je me trompe? Merci d’avance