• 粘性会话 session affinity sticky session requests from the same client to be passed to the same server in a group of servers


    Module ngx_http_upstream_module http://nginx.org/en/docs/http/ngx_http_upstream_module.html#sticky

    Syntax: sticky cookie name [expires=time] [domain=domain] [httponly] [secure] [path=path];
    sticky route $variable ...;
    sticky learn create=$variable lookup=$variable zone=name:size [timeout=time] [header] [sync];
    Default:
    Context: upstream

    This directive appeared in version 1.5.7.

    Enables session affinity, which causes requests from the same client to be passed to the same server in a group of servers. Three methods are available:

    When the cookie method is used, information about the designated server is passed in an HTTP cookie generated by nginx:

    upstream backend {
        server backend1.example.com;
        server backend2.example.com;
    
        sticky cookie srv_id expires=1h domain=.example.com path=/;
    }
    

    A request that comes from a client not yet bound to a particular server is passed to the server selected by the configured balancing method. Further requests with this cookie will be passed to the designated server. If the designated server cannot process a request, the new server is selected as if the client has not been bound yet.

    The first parameter sets the name of the cookie to be set or inspected. The cookie value is a hexadecimal representation of the MD5 hash of the IP address and port, or of the UNIX-domain socket path. However, if the “route” parameter of the server directive is specified, the cookie value will be the value of the “route” parameter:

    upstream backend {
        server backend1.example.com route=a;
        server backend2.example.com route=b;
    
        sticky cookie srv_id expires=1h domain=.example.com path=/;
    }
    

    In this case, the value of the “srv_id” cookie will be either a or b.

    Additional parameters may be as follows:

    expires=time
    Sets the time for which a browser should keep the cookie. The special value max will cause the cookie to expire on “31 Dec 2037 23:55:55 GMT”. If the parameter is not specified, it will cause the cookie to expire at the end of a browser session.
    domain=domain
    Defines the domain for which the cookie is set. Parameter value can contain variables (1.11.5).
    httponly
    Adds the HttpOnly attribute to the cookie (1.7.11).
    secure
    Adds the Secure attribute to the cookie (1.7.11).
    path=path
    Defines the path for which the cookie is set.

    If any parameters are omitted, the corresponding cookie fields are not set.

    route

    When the route method is used, proxied server assigns client a route on receipt of the first request. All subsequent requests from this client will carry routing information in a cookie or URI. This information is compared with the “route” parameter of the server directive to identify the server to which the request should be proxied. If the “route” parameter is not specified, the route name will be a hexadecimal representation of the MD5 hash of the IP address and port, or of the UNIX-domain socket path. If the designated server cannot process a request, the new server is selected by the configured balancing method as if there is no routing information in the request.

    The parameters of the route method specify variables that may contain routing information. The first non-empty variable is used to find the matching server.

    Example:

    map $cookie_jsessionid $route_cookie {
        ~.+.(?P<route>w+)$ $route;
    }
    
    map $request_uri $route_uri {
        ~jsessionid=.+.(?P<route>w+)$ $route;
    }
    
    upstream backend {
        server backend1.example.com route=a;
        server backend2.example.com route=b;
    
        sticky route $route_cookie $route_uri;
    }
    

    Here, the route is taken from the “JSESSIONID” cookie if present in a request. Otherwise, the route from the URI is used.

    learn

    When the learn method (1.7.1) is used, nginx analyzes upstream server responses and learns server-initiated sessions usually passed in an HTTP cookie.

    upstream backend {
       server backend1.example.com:8080;
       server backend2.example.com:8081;
    
       sticky learn
              create=$upstream_cookie_examplecookie
              lookup=$cookie_examplecookie
              zone=client_sessions:1m;
    }
    

    In the example, the upstream server creates a session by setting the cookie “EXAMPLECOOKIE” in the response. Further requests with this cookie will be passed to the same server. If the server cannot process the request, the new server is selected as if the client has not been bound yet.

    The parameters create and lookup specify variables that indicate how new sessions are created and existing sessions are searched, respectively. Both parameters may be specified more than once, in which case the first non-empty variable is used.

    Sessions are stored in a shared memory zone, whose name and size are configured by the zoneparameter. One megabyte zone can store about 4000 sessions on the 64-bit platform.  The sessions that are not accessed during the time specified by the timeout parameter get removed from the zone. By default, timeout is set to 10 minutes.

    The header parameter (1.13.1) allows creating a session right after receiving response headers from the upstream server.

    The sync parameter (1.13.8) enables synchronization of the shared memory zone.

    This directive is available as part of our commercial subscription.

    Syntax: sticky_cookie_insert name [expires=time] [domain=domain] [path=path];
    Default:
    Context: upstream

    This directive is obsolete since version 1.5.7. An equivalent sticky directive with a new syntax should be used instead:

    sticky cookie name [expires=time] [domain=domain] [path=path];

    存储位置:Sessions are stored in a shared memory zone;

    cookie/session值:目的是导向哪个服务器,故值为服务器节点标识;

  • 相关阅读:
    [C#]获取指定文件文件名、后缀、所在目录等
    Mysql 存储引擎中InnoDB与Myisam的主要区别
    MySQL的btree索引和hash索引的区别
    Mysql事务的隔离级别
    AE序列号
    mysql索引类型说明
    去除url中自带的jsessionid
    redirect传值非url(springmvc3)
    ueditor的使用
    mysql用户管理(开户、权限)
  • 原文地址:https://www.cnblogs.com/rsapaper/p/9969277.html
Copyright © 2020-2023  润新知