会话保持是一种将同一客户端的请求分配到同一个后端服务器的技术,可以避免会话丢失。
会话保持优势:
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
}
IP 哈希说明:
ip_hash:使用 IP 哈希算法分配请求IP 哈希原理: IP 哈希是一种基于客户端 IP 地址的会话保持方法,根据客户端 IP 地址的哈希值分配请求。同一客户端的请求会分配到同一个后端服务器。
upstream backend {
hash $request_uri consistent;
server backend1.example.com;
server backend2.example.com;
}
哈希说明:
hash $request_uri consistent:使用请求 URI 的哈希值分配请求哈希原理: 哈希是一种基于自定义变量的会话保持方法,根据自定义变量的哈希值分配请求。同一变量的请求会分配到同一个后端服务器。
upstream backend {
server backend1.example.com;
server backend2.example.com;
sticky cookie srv_id expires=1h domain=example.com path=/;
}
Cookie 保持说明:
sticky cookie srv_id expires=1h domain=example.com path=/:使用 Cookie 保持会话Cookie 保持原理: Cookie 保持是一种基于 Cookie 的会话保持方法,Nginx 会在响应中设置 Cookie,客户端会在后续请求中携带 Cookie,Nginx 根据 Cookie 分配请求。
upstream backend {
server backend1.example.com;
server backend2.example.com;
sticky learn create=$upstream_cookie_examplecookie
lookup=$cookie_examplecookie
zone=client_sessions:1m
timeout=1h;
}
学习保持说明:
sticky learn:使用学习保持会话create=$upstream_cookie_examplecookie:创建 Cookielookup=$cookie_examplecookie:查找 Cookiezone=client_sessions:1m:设置共享内存区域timeout=1h:设置超时时间学习保持原理: 学习保持是一种基于学习的会话保持方法,Nginx 会学习后端服务器设置的 Cookie,并在后续请求中根据 Cookie 分配请求。
| 方法 | 说明 | 优点 | 缺点 |
|---|---|---|---|
ip_hash | IP 哈希 | 简单、可靠 | 不能根据后端服务器的负载情况分配请求 |
hash | 哈希 | 灵活 | 不能根据后端服务器的负载情况分配请求 |
sticky cookie | Cookie 保持 | 可以根据后端服务器的负载情况分配请求 | 需要客户端支持 Cookie |
sticky learn | 学习保持 | 可以根据后端服务器的负载情况分配请求 | 需要后端服务器设置 Cookie |