HAProxy基于cookie实现客户端会话保持

HAProxy基于cookie实现客户端会话保持

使用ip_hash时,如果有众多用户使用相同的公网地址去访问同一个服务时,由于这些用户所使用的公网IP都为同一个,HAproxy就会把他们调度到同一后端的服务器,由此可能造成后天的单台服务器的压力过大,因此需要其他的方法来进行调度。
HAProxy可以实现插入一层cookie,当用户第一次访问会查看是否有cookie,如果没有就在响应报文中插入以程cookie返回给客户端,当用户再次访问就会根据cookie来调度请求。lvs和nginx无法实现

cookie <value>

为当前server指定cookie值,实现基于cookie的会话黏性

cookie NAME [rewrite|insert|prefix] [indirect] [nocache] [postonly] [preserve] [httponly] [secure] [domain <domain>] [maxidle<idle>] [maxlife<life>]
NAME: cookie名称,用于持久连接
rewrite: 重写。如果之前有cookie就会覆盖了重写,或插入到前缀上
insert: 插入
prefix: 前缀
nocache: 当client和haproxy之间有缓存存在时,不缓存cookie

基于cookie实现会保持

修改配置文件,添加cooke选项

listen web
 bind 172.20.27.20:80
 mode http
 cookie SERVER-COOKIE insert indirect nocache           #插入cookie选项
 option forwardfor
 server web1 192.168.27.21:80 cookie web1 check inter 3000 fall 3 rise 5    #在后端服务器中拆入cookie的值
 server web2 192.168.27.22:80 cookie web2 check inter 3000 fall 3 rise 5

测试

使用curl来查看报文头部

[[email protected] ~]# curl -I www.mylinuxops.com
HTTP/1.1 200 OK
Server: nginx/1.17.0
Date: Tue, 04 Jun 2019 11:41:23 GMT
Content-Type: text/html
Content-Length: 8
Last-Modified: Tue, 04 Jun 2019 11:29:30 GMT
ETag: "5cf6561a-8"
Accept-Ranges: bytes
Set-Cookie: SERVER-COOKIE=web2; path=/              #此为插入的cookie信息
Cache-control: private

由于curl命令无法记录cookie,接下来使用浏览器来访问

原文地址:https://blog.51cto.com/11886307/2406614

时间: 2024-10-18 03:27:25

HAProxy基于cookie实现客户端会话保持的相关文章

Haproxy的三种保持客户端会话保持方式

haproxy 三种保持客户端Seesion; 一.源地址hash(用户IP识别) haroxy 将用户IP经过hash计算后 指定到固定的真实服务器上(类似于nginx 的IP hash 指令). 缺陷,当后端一台服务器挂了以后会造成部分session丢失. 配置指令 backend SOURCE_srv mode   http balance  source server app-node1  10.31.1.179:80  check port 80 inter 3000  rise 3

nginx第三方模块---nginx-sticky-module的使用(基于cookie的会话保持)

目前的项目网站架构中使用了F5和nginx,F5用来做负载均衡,nginx只用作反向代理服务器.最近应客户的要求准备去掉F5,使用软负载.大家都知道nginx抗并发能力强,又可以做负载均衡,而且使用nginx对我们目前的网站架构不会有大的变动,所以首选方案是nginx.但问题来了,nginx在会话保持这方面比较弱,用ip_hash做会话保持有很大的缺陷,它是通过客户端ip来实现,根据访问ip的hash结果分配请求到后端的app服务器,负载不会很均匀.之前在一个小项目前中使用过这种方法,已经得到验

浏览器禁用Cookie,基于Cookie的会话跟踪机制失效的解决办法

当浏览器禁用Cookies时,基于Cookie的会话跟踪机制就会失效,解决办法是利用URL重写机制跟踪用户会话. 在使用URL重写机制的时候需要注意,为了保证会话跟踪的正确性,所有的链接和重定向语句中的URL都需要调用encodeURL()或encodeRedirectURL()方法进行编码.另外,由于附加在URL中的SessionID是动态产生的,对于每一个用户都是不同的,所欲对于静态页面的相互跳转,URL重写机制就无能为力了,但是,我们也可以通过将静态页面转换为动态页面来解决这个问题. 在w

分布式架构下的会话追踪实践【基于Cookie和Redis实现】

分布式架构下的会话追踪实践[基于Cookie和Redis实现] 博客分类: NoSQL/Redis/MongoDB session共享rediscookie分布式架构session 在单台Tomcat应用中,通常使用session保存用户的会话数据.面对高并发的场景,一台Tomcat难当大任,通常我们会使用Nginx在前端拦截用户请求,转发给后端的Tomcat服务器群组.在集群环境下,怎么才能做到session数据在多台Tomcat之间的共享呢? 当然我们可以在多台Tomcat之间进行sessi

haproxy 常用acl规则与会话保持

一.常用的acl规则 haproxy的ACL用于实现基于请求报文的首部.响应报文的内容或其它的环境状态信息来做出转发决策,这大大增强了其配置弹性.其配置法则通常分为两 步,首先去定义ACL,即定义一个测试条件,而后在条件得到满足时执行某特定的动作,如阻止请求或转发至某特定的后端.定义ACL的语法格式如下. acl <aclname> <criterion> [flags] [operator] <value> ... <aclname>:ACL名称,区分字符

基于Cookie的Session和禁用Cookie的Session

Session简介 session的作用 它是一种在客户端与服务器之间保持状态的解决方案,它将会话信息(uid等)供浏览器后续请求使用,可以获取并修改变量的值.和cookie一起使用识别同一个客户. session何时创建 客户首次访问服务器时,session被创建并分配一个唯一的session_id,并将这个session_id传入客户端cookie中,保持客户端与服务器端的session_id一致. 如何确认某一位用户?session的有效时间 当用户再次访问浏览器时,会通过cookie传递

基于 Cookie 的 SSO 中间件 kisso

kisso  =  cookie sso 基于 Cookie 的 SSO 中间件,它是一把快速开发 java Web 登录系统(SSO)的瑞士军刀.欢迎大家使用 kisso !! kisso 帮助文档下载 1.支持单点登录 2.支持登录Cookie缓存 3.支持防止 xss攻击, SQL注入,脚本注入 4.支持 Base64 / MD5 / AES / PBE / RSA 算法 5.支持浏览器客户端校验 6.支持Cookie参数配置及扩展 7.支持跨域登录,模拟登录 8.支持在线人数统计 9.支

Java开发系列-Cookie与Session会话技术

概述 会话技术:当用户打开浏览器的时候,访问不同的资源,直到用户将浏览器关闭,可以认为这是一次会话.会话技术产生是由于Http请求是一个无状态的协议,它不会记录上次访问的内容,用户在访过程中难免产生一些数据,通过会话技术可以将其保存起来.常见的会话技术cookie.Session. Cookie Cookie称之为浏览器端的会话技术. Cookie是由服务端生成,通过response将cookie写会浏览区(set-cookie),保留在浏览器上,下一次访问,浏览器根据一定的规则携带不同的Coo

Cookie &amp; Session【会话管理与控制】

用现实生活 类比Cookie 和 Session : 两个关于开会的故事: 在几十年前人们开会的时候,都需要带上一个参会证.这个参会证上有这个人的职务.姓名.单位.照片等信息.在开会的时候,会议安保人员.组织者只需要检查相关信息就行了.(个人信息,由自己携带) 几十年后,越来越先进了.你参会前,会给你发一个卡片或者工牌.这个卡片上有一个唯一的号码.拿到号码,再用摄像头扫一扫即可完成你的个人信息核对.(个人信息,由会议主办方的数据库保存) 在电脑里面也有这两种验证方式: 人们在参会证上写着所有的相