Nginx可以通过ngx_http_upstream_module模块实现Session共享。Session共享用于在上游服务器之间同步会话数据,保证用户在多个服务器之间切换时会话不中断。
实现Session共享需要以下步骤:
1、 选择一致性Hash负载均衡策略(ip_hash或hash),使同一客户端IP的请求始终转发到同一台上游服务器。
upstream app_servers {
ip_hash;
server 127.0.0.1:8000;
server 127.0.0.1:8001;
}
2、 定义共享内存区或其他机制使上游服务器能访问同一Session数据。
- Nginx提供ngx_http_memc_module共享内存模块。
- 也可以使用redis等持久化存储作为会话存储介质。
3、 上游应用服务器将Session数据保存到第2步定义的共享存储。
4、 Nginx将请求根据ip_hash转发到对应的上游服务器。
5、 上游服务器从共享存储中获取对应会话数据,保证会话连续。
例如,完整配置:
# Nginx配置
upstream app_servers {
ip_hash;
server 127.0.0.1:8000;
server 127.0.0.1:8001;
}
# 上游服务器使用共享内存模块api保存session
ngx_http_memc_set("some_key", "some value", 5);
这种配置可以在负载均衡的上游服务器之间实现会话同步,用户在不同服务器之间切换时会话保持不变。