如何基于Python生成的Cookie实现Nginx限时1分钟粘性会话?
ip_hash指令是基于客户端IP绑定后端服务器,无法设置会话过期时间,要实现1分钟后自动切换服务器的需求,得改用基于Cookie的粘性会话方案,下面提供两种可行实现方式:
方式一:使用Nginx原生指令(无需额外编译)
通过自定义Cookie并设置过期时间,结合后端服务器组实现:
upstream backend { server backend1.example.com; server backend2.example.com; # 无Cookie时用ip_hash作为默认路由策略 ip_hash; } server { listen 80; server_name your-domain.com; location / { # 检查客户端是否携带自定义粘性Cookie if ($cookie_STICKY_SESSION) { proxy_pass http://backend; break; } # 首次请求或Cookie过期时,设置有效期1分钟的Cookie add_header Set-Cookie "STICKY_SESSION=$upstream_addr; Path=/; Max-Age=60"; proxy_pass http://backend; } }
说明:
- 首次请求时,Nginx会根据
ip_hash分配后端服务器,并返回带有STICKY_SESSION的Cookie,值为后端服务器地址,有效期60秒。 - 1分钟后Cookie自动过期,下次请求会重新触发
ip_hash分配新的后端服务器。
方式二:使用Nginx Sticky模块(需编译启用)
如果可以重新编译Nginx,使用官方提供的sticky模块能更简洁实现需求:
upstream backend { server backend1.example.com; server backend2.example.com; # 设置粘性Cookie,名称为STICKY_SESSION,有效期60秒 sticky cookie STICKY_SESSION expires=60s path=/; } server { listen 80; server_name your-domain.com; location / { proxy_pass http://backend; } }
说明:
- 编译Nginx时需添加参数:
--with-http_sticky_module(开源版需手动添加,商业版默认集成)。 - 模块会自动处理Cookie的生成、绑定和过期逻辑,无需额外配置
add_header。
注意事项
- 确保Python应用不会修改或覆盖你设置的粘性Cookie,避免会话绑定失效。
- 测试时可手动清除浏览器Cookie,或等待1分钟后刷新页面,验证是否切换到其他后端服务器。
内容的提问来源于stack exchange,提问作者Maor
相关产品推荐
相关产品推荐

