Несколько экземпляров redis для нескольких серверов NodeJS - PullRequest
0 голосов
/ 12 марта 2019

После небольшого исследования я пришел к выводу, что могу запускать несколько экземпляров Redis на своем сервере CentOS для каждого сервера NodeJS, который я запускаю (я использую Redis для хранения сеансов).

Я следовал эти инструкции и оба экземпляра работают правильно на двух разных портах.

На моих серверах NodeJS я настроил Redis следующим образом:

import * as session from "express-session";

var RedisStore = require('connect-redis')(session);
var redis = require("redis").createClient();

app.use(session(
    {
        secret: secret,
        store: new RedisStore({ host: 'localhost', port: 6379, client: redis }),
        cookie: { maxAge: 12 * 3600000 },
        resave: true, saveUninitialized: true
    }
));

Один с портом 6379 а другой с 6380.

Я использую req.session.regenerate для регистрации сеанса.

Обе системы входа работают отлично по отдельности.Тем не менее, когда я загружаю что-либо в одно приложение, сеансы другого приложения удаляются (и необходимо повторно войти в систему).

Что мне здесь не хватает?

1 Ответ

0 голосов
/ 12 марта 2019

Проблема выглядит так, как будто это «хранилище сеансов» в Express, а не использование Redis.

Из экспресс-сессии Документация:

ПРИМЕЧАНИЕ: будьте осторожны при создании уникальных идентификаторов, чтобы ваши сеансы не конфликтовали.

app.use(session({
  genid: function(req) {
    return genuuid() // use UUIDs for session IDs
  },
  secret: 'keyboard cat'
}))

Имя : имя файла cookie идентификатора сеанса, который необходимо установить в ответе (и считывать из запроса).

Значением по умолчанию является «connect.sid».

В частности, это предупреждение объясняет вашу проблему:

Обратите внимание, если у вас несколько приложений, работающих на одном имени хоста (это просто имя, то есть localhost или 127.0.0.1; разные схемы и порты не называют другое имя хоста), то вам нужно отделить сеансовые куки друг от друга. Самый простой способ - просто установить разные имена в приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...