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

无需Nginx Plus实现Nginx粘性Cookie/会话配置求助

实现Nginx基于自定义Cookie的连接粘性(无需Nginx Plus)

核心配置方案

利用你Flask应用已生成的、含容器内网IP且有效期5分钟的Cookie,通过Nginx原生配置实现请求粘性:Cookie有效期内固定转发到对应容器,过期后自动切换回轮询策略分配新容器。

1. 修改Nginx配置文件

更新你的nginx.conf,调整为以下内容(假设Flask设置的Cookie名为flask_container_ip,若实际名称不同,替换对应字段即可):

events {}

http {
    # 默认轮询池:无有效Cookie时,用此规则分配容器
    upstream flask-pool {
        server flask-app:5000;
    }

    # 映射Cookie中的容器IP到后端服务器地址
    map $cookie_flask_container_ip $backend_server {
        default flask-pool;  # 无Cookie/过期时,使用轮询池
        ~^(\d+\.\d+\.\d+\.\d+)$ $1:5000;  # 匹配Cookie中的IP,直接转发到对应容器
    }

    server {
        listen 80;
        location / {
            proxy_pass http://$backend_server;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            # 确保请求携带Cookie,让Flask能识别并维持有效期
            proxy_set_header Cookie $http_cookie;
        }
    }
}

2. 配置说明

  • flask-pool:作为默认轮询上游,当Cookie不存在或过期时,Nginx会通过此池随机分配新的Flask容器。
  • map指令:自动解析Cookie中的容器内网IP,将请求定向到对应容器;若Cookie无效, fallback到轮询策略。
  • 适配docker-compose:flask-app服务名会自动解析到所有扩容的容器实例,初始请求通过轮询分配后,Flask设置的Cookie会锁定后续5分钟的请求路径。

验证操作

  1. 重启Nginx容器加载新配置:
docker-compose restart nginx
  1. 扩容Flask容器(若未执行):
docker-compose up -d --scale flask-app=3
  1. 测试:通过浏览器或curl访问Nginx,观察请求在5分钟内固定到同一容器,Cookie过期后自动切换到其他容器。

注意事项

  • 确保Flask设置的CookiePath为/,保证所有请求都能携带该Cookie。
  • 容器重启后内网IP会变化,此时Cookie失效,Nginx会自动通过轮询分配新容器,符合你的切换需求。

内容的提问来源于stack exchange,提问作者Ofir Aviv

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 13:01:41