У нас есть приложение Drupal, которое использует sso для входа в систему.
Мы используем классические балансировщики нагрузки AWS (ELB), AWS сообщает нам, что на ELB нет постоянных сеансов.
То, что я пытаюсь выяснить, - это то, как cookie-файлы работают без постоянства на классических балансировщиках нагрузки.
Пример.com DNS указывает на ELB. Есть 2 сервера в пуле Server1 и Server2
То, что мы хотим сделать, - это если пользователь нажимает на свою домашнюю страницу, http://example.com/user/12345/
скажем, на сервере 1, если он еще не вошел в систему, он перенаправляется на страницу sso http://example.com/user/login/sso
, автоматически входит в систему и получает файл cookie, SESS<hexnumber>
а затем перенаправляется обратно наhttp://example.com/user/12345/
Нам не разрешается добавлять какие-либо серверы сеансов (redis), что является гарантией того, что они будут оставаться на сервере 1 для обоих перенаправлений.
Насколько мне известно, при каждом обращении к «example.com» пользователь может оказаться на сервере 1 или 2.
Мой вопрос:
Если они получают cookie на server1, а затем перенаправляются на server2, как server2 узнает, что cookie уже назначен этому пользователю на server1?
Кажется, я думаю о себе в кругах. При работе с этим типом установки в прошлом с использованием LB без сохранения сеанса мы использовали сервер redis для хранения сеансов, и каждый запрос просматривал сервер redis для получения информации о сеансе.
источник
example.com
если пользователи получают куки, тогда держать их на www1.example.com или www2.example.com?Если вы не можете использовать базу данных управления сессиями, такую как Elasticache Redis (Redis для простых сессий не должен стоить более 15 долларов в месяц), то следующим лучшим вариантом будет включение липких сессий на ELB;
https://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-sticky-sessions.html
Это заставит пользователей переходить к одному и тому же внутреннему узлу на протяжении всего сеанса. «Файл cookie, сгенерированный балансировщиком нагрузки» со временем жизни 900 секунд должен быть достаточно хорошим, но вы можете изменить это.
источник