zoukankan      html  css  js  c++  java
  • haproxy 基于 cookie 的会话保持

    haproxy cookie session persist

    feat

    1. 请求会转发给配置了相同cookie的server
    2. 会转发给weight=0的后端
    3. 默认不会转发给down状态或disabled的server
      1. 如果设置了option persist或者force-persist,则会强制转发给down状态或者disabled的server;同时如果配置了option redispatch,则尝试请求down状态的server失败后,仍然会将请求转发给其他up状态server
    4. 如果配置了ignore-persist if|unless $acl_condition,则满足acl规则的请求,会发送给所有的后端,而不是匹配cookie的后端

    示例

    # 客户端请求将被转发给具有相同cookie值的后端
    backend be1
        # 设置响应的Set-Cookie头部
        # 参看cookie policy 
        cookie $cookie_name $cookie_ops_policy $other_params
    
        server serv1 cookie $cookie_value
    
    1. 设置的cookie和server返回的cookie不重名

      1. rewrite 啥也不干
      2. insert 在响应中增加设置的cookie
      3. prefix 啥也不干
    2. 设置的cookie和server返回的cookie重名

      1. rewrite
        设置该cookie的值为server配置中设置的$cookie_value
      2. insert

        默认移除server返回的cookie,然后增加该cookie;如果设置了preserve,则不会修改server返回的cookie;如果设置了indirect,请求转发给后端时,会删除该cookie
      3. prefix

        在server返回的cookie的值前加上server配置中设置的$cookie_value~前缀,比如server返回A, server配置中设置了B,那么返回给客户端的cookie值为B~A

    是否转发给down或者disabled的server

    1. force-persist if|unless $acl_condition
      1. 根据acl规则,将请求强制转发给down或者disabled的server
    2. option persist
      1. 强制尝试转发给down 或者disabled的server

    取消某些请求的cookie persistence

    1. ignore-persit if|unless $acl_condition
      1. 根据acl规则,取消某些请求的cookie persistence特性,这些请求将按照转发策略,发给所有的后端
      2. 一般用于静态内容的请求,或者其他无需会话保持的请求
    1. 配置了option redispatch, 当会话保持选择的后端无法处理新的请求时(比如请求过多,后端down掉),会尝试分发请求到其他后端,从而让会话保持失效

    客户端多次收到Set-Cookie头部

    1. haproxy 会每隔4s重新设置一次cookie,暂未找到可以配置的选项,此时客户端始终收到的是同一个cookie值
    2. 发生redispatch,此时客户端将收到不同的cookie值
  • 相关阅读:
    HDU 1251 统计难题 字符匹配
    mac 安装mysql
    ubuntu git 下添加 ssh
    mac下virtualenv使用
    git-ssh配置和使用
    在PythonAnyWhere上部署Django项目
    ImportError: No module named PIL
    mysql 命令行操作
    ubuntu安装ssh
    常用git命令
  • 原文地址:https://www.cnblogs.com/zhedan/p/14246973.html
Copyright © 2011-2022 走看看