我已经看到使用 nginx 设置负载平衡挺容易我想尝试一下。我唯一担心的是会话:如何利用 nginx 将客户端的所有后续调用路由到同一服务器以实现会话粘性?
谢谢
答案1
使用 ip_hash 指令
答案2
另外,你可以看看Nginx 粘性模块
当处理多个后端服务器时,一个客户端(浏览器)始终由同一个后端服务器提供服务有时很有用(例如,为了会话持久)。
使用 IP 持久性(使用 ip_hash 上游模块)可能不是一个好主意,因为可能存在许多不同的浏览器使用相同 IP 地址(代理后面)的情况,这会导致负载平衡系统不公平。
使用 cookie 来跟踪上游服务器使得每个浏览器都是唯一的。
当粘性模块无法应用时,它会切换回经典的循环上游或返回“错误网关”(取决于 no_fallback 标志)。
当浏览器不支持 Cookie 时,粘性模块无法应用
答案3
ip_hash 是 nginx 对 session 的负载均衡规则,但是 nginx 服务器必须获取到真实 IP,如果使用 squid 作为前端服务器,那么 nginx 服务器会获取到 squid 的 IP,接下来 nginx 必须指向真实服务器,如果 nginx 服务器后面还有其他负载均衡服务器,那么 session 不会发往同一个真实服务器。