Есть два способа сделать это:
- вы разделяете свои сеансы между своими бэкэндами, или
- вы передаете повару ie, чтобы разрешить nginx подключите клиента к вышестоящему серверу.
Сообщите мне, требуется ли какое-либо изменение конфигурации для nginx.
, если вы не можете изменить приложение, например, позволяя нескольким экземплярам приложения использовать общее хранилище, вы можете попробовать использовать sticky
директиву nginx (> = 1.5.7).
Используя ваш пример, это должно быть что-то вроде
http {
...
upstream rails {
server 127.0.0.1:5479;
server 127.0.0.1:5480;
server 127.0.0.1:5481;
server 127.0.0.1:5482;
sticky rails_sticky expires=1d domain=.rails.local path=/ httponly secure;
}
...
server {
listen 5478;
server_name rails.local;
root "../games/public";
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_pass http://rails;
}
...
}
...
}
Возможно, вам потребуется настроить конфигурацию в соответствии с вашей средой.
Используя sticky
, nginx должен проверить и привязать клиента с помощью липкий повар ie называется rails_sticky
, если он еще не привязан. Ограничение клиента по-прежнему проверяет любой метод балансировки, установленный в директиве upstream
, по умолчанию взвешенный циклический перебор.
Если клиент был привязан к серверу, любые последующие запросы будут перенаправлены на указанный вышестоящий сервер. В случае, если указанный вышестоящий сервер не может быть использован, nginx повторно привяжет клиента к другому серверу.