Назад | Перейти на главную страницу

Что такое запрос-обучение HAProxy?

Я читаю Руководство HAProxy и есть часть, которую я не понимаю:

request-learn
               If this option is specified, then haproxy will be able to learn
               the cookie found in the request in case the server does not
               specify any in response. This is typically what happens with
               PHPSESSID cookies, or when haproxy's session expires before
               the application's session and the correct server is selected.
               It is recommended to specify this option to improve reliability.

Что означает «в случае, если сервер не указывает ни одного в ответе», в частности, на что отвечает сервер и какой смысл изучать cookie, если сервер его не указывает?

Вопрос «когда сеанс haproxy истекает до сеанса приложения» кажется важным, но его обработка haproxy здесь не имеет смысла.

Обычно, когда вы используете файл cookie, он приходит в ответ от внутреннего сервера с заголовком «set-cookie». Обычно это происходит в ответ на логин. Если этого не произойдет, HAProxy не сможет привязать вас к тому же внутреннему серверу.

Эта опция позволяет HAProxy «узнавать» о куки-файлах на основе HTTP-запроса, а не только HTTP-ответа с «set-cookie».

Чтобы ответить на ваши конкретные вопросы:

"На что отвечает сервер?" Любой HTTP-запрос

«Какой смысл изучать куки, которые сервер не предоставил?» Он позволяет HAProxy выполнять липкость, когда у вас есть сервер, который выполняет нестандартные действия и не может / не может предоставить файл cookie, как ожидалось. В качестве примера он приводит файл cookie "PHPSESSID".

"Сеанс HAproxy истекает раньше, чем сеанс приложения?" HAProxy хранит файлы cookie для закрепления. У них есть TTL, прежде чем они перестанут работать. В случае, если TTL для внутреннего сервера больше, чем TTL для HAProxy, HAProxy забудет cookie перед внутренним сервером. У клиента будет файл cookie в запросе, и HAProxy сможет повторно изучить этот файл cookie.

Ваш скептицизм оправдан, потому что, если ваши внутренние серверы не реплицируют информацию о сеансе, этот вариант имеет ограниченную полезность в случае TTL. Однако это все еще применимо к сценарию нестандартного файла cookie.