Подтвердить что ты не робот

Amazon ELB - личная сессия потеряла cookie

У меня есть приложение Node.js на Elastic Beanstalk, работающее на нескольких экземплярах ec2 за балансировщиком нагрузки (elb).

В связи с необходимостью моего приложения мне пришлось активировать сессионную липкость. Я активировал "AppCookieStickinessPolicy", используя свой файл cookie "sails.sid" в качестве ссылки.

Проблема в том, что моему приложению нужен этот куки файл для работы proprely, но в качестве момента, когда я активирую сессионную палочку (через продолжительную сессию Stickiness или в моем случае: Application-Controlled Session Stickiness), заголовки, идущие на мой сервер, изменяются, и я потерял свой пользовательский cookie, который заменен файлом cookie AWSELB (amazon ELB).

Как настроить loadbalancer, чтобы не заменить мой файл cookie?

Если я хорошо понял, AppCookieStickinessPolicies должен сохранять свой файл cookie, но это не так. Я что-то делаю неправильно?

Заранее спасибо

Описание моего балансира нагрузки:

{
    "LoadBalancerDescriptions": [
        {
            "AvailabilityZones": [
                "us-east-1b"
            ],

            ....

            "Policies": {
                "AppCookieStickinessPolicies": [
                    {
                        "PolicyName": "AWSConsole-AppCookieStickinessPolicy-awseb-e-y-AWSEBLoa-175QRBIZFH0I8-1452531192664",
                        "CookieName": "sails.sid"
                    }
                ],
                "LBCookieStickinessPolicies": [
                    {
                        "PolicyName": "awseb-elb-stickinesspolicy",
                        "CookieExpirationPeriod": 0
                    }
                ],
                "OtherPolicies": []
            },
            "ListenerDescriptions": [
                {
                    "Listener": {
                        "InstancePort": 80,
                        "LoadBalancerPort": 80,
                        "InstanceProtocol": "HTTP",
                        "Protocol": "HTTP"
                    },
                    "PolicyNames": [
                        "AWSConsole-AppCookieStickinessPolicy-awseb-e-y-AWSEBLoa-175QRBIZFH0I8-1452531192664"
                    ]
                }
            ]

            ....

        }
    ]
}
4b9b3361

Ответ 1

Клейкий сеансовый cookie, заданный ELB, используется для определения того, что node в кластере для запроса маршрута.

Если вы настроите файл cookie в своем приложении, на который вам нужно положиться, ожидая, что ELB будет использовать этот файл cookie, он перезапишет значение, которое вы устанавливаете.

Попробуйте просто разрешить ELB управлять файлом cookie сеанса.

Ответ 2

Я потратил много времени на тестирование функций липкости ELB и запросов на маршрутизацию от одного и того же клиента к тому же компьютеру на внутреннем сервере кластеров.

Проблема в том, что она не всегда срабатывала на 100%, поэтому мне пришлось написать процедуру резервного копирования, используя сеансы, хранящиеся в MySQL. Но потом я понял, что мне не нужна функциональность липкости ELB, я мог бы просто использовать сессионную систему MySQL.

Сложнее написать систему сеансов базы данных, и, конечно, есть накладные расходы, так как каждый HTTP-вызов неизбежно будет включать запрос к базе данных. Однако, если это запрос использует первичный индекс, это не так уж плохо.

Большим преимуществом является то, что любой запрос может отправляться на любой сервер. ИЛИ если один из ваших серверов умирает, следующий может справиться с этой задачей. Для действительно устойчивых приложений система сеансов базы данных неизбежна.