You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于Python生成的Cookie实现Nginx限时1分钟粘性会话?

Nginx实现基于Cookie的限时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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 10:27:20