Nginx изменений конфигурации для липкой сессии в циклическом режиме - PullRequest
0 голосов
/ 07 мая 2020

Приложение Rails (4.2) размещено на nginx и обслуживается на localhost: 5478. Ip_ha sh в приведенном ниже фрагменте кода поддерживает согласованность ответа на запрос сервера и работает должным образом.

upstream rails {
  ip_hash;

Чтобы разделить нагрузку, ip_ha sh был прокомментирован. Теперь логин для пользователя начинает терпеть неудачу, так как требуется передача сеанса cook ie, которая работает аналогичным образом для Rails3. Это связано с чем-то связанным с липким сеансом, но невозможно отследить точный способ его обработки.

nginx .conf

upstream mongrel {
    server 127.0.0.1:5469;
  }

  upstream rails {
    #ip_hash;
    server 127.0.0.1:5479;
    server 127.0.0.1:5480;
    server 127.0.0.1:5481;
    server 127.0.0.1:5482;
  }


    location / {
      # Setup redirection headers
      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;

      # Pass the request thru
      proxy_pass         http://mongrel;
    }
  }

  server {
    listen          5478 default;
    server_name     _;
    root            "../games/public";

    location ~ ^/assets/ {
      root "../d2/public";
      expires 1y;
      add_header Cache-Control public;

      add_header ETag "";
      break;
    }

Я пробовал использовать consistent_hash $scheme $request_uri; , как было предложено, но согласованный_ha sh, поскольку директива не распознается и не работает. Сообщите мне, требуется ли какое-либо изменение конфигурации для nginx. Я также нашел ту же конфигурацию nginx с ip_ha sh, прокомментировал работу для приложения Rails3, не уверен, связано ли это с

1 Ответ

0 голосов
/ 12 мая 2020

Есть два способа сделать это:

  1. вы разделяете свои сеансы между своими бэкэндами, или
  2. вы передаете повару 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 повторно привяжет клиента к другому серверу.

...