无需Nginx Plus实现Nginx粘性Cookie/会话配置求助
核心配置方案
利用你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分钟的请求路径。
验证操作
- 重启Nginx容器加载新配置:
docker-compose restart nginx
- 扩容Flask容器(若未执行):
docker-compose up -d --scale flask-app=3
- 测试:通过浏览器或curl访问Nginx,观察请求在5分钟内固定到同一容器,Cookie过期后自动切换到其他容器。
注意事项
- 确保Flask设置的Cookie
Path为/,保证所有请求都能携带该Cookie。 - 容器重启后内网IP会变化,此时Cookie失效,Nginx会自动通过轮询分配新容器,符合你的切换需求。
内容的提问来源于stack exchange,提问作者Ofir Aviv
相关产品推荐
相关产品推荐

