NetScaler的cookieinsert和sourceip联合保持机制

简介:
使用NetScaler的cookieinsert和sourceip联合进行session保持机制即主用cookieinsert方式进行保持,当cookieinsert失效时启用sourceip的保持机制。
客户端访问到NetScaler的某一个vserver,NetScaler接收到第一个request时,使用load balance的算法(比如least connection)进行分发到真实服务器。当服务器返回response给NetScaler时,NetScaler会在这个response的http头部插入一个cookie,命名为NSC_xxxx。当下一个request中带有这个cookie时,NetScaler就会根据这个cookie进行session保持。如下是这个cookie的官方说明: 
The system inserts the following cookie NSC_XXXX=<ServiceIP ><ServicePort> where 
XXXX is the encrypted name of the virtual server serving the request; 
ServiceIP is the hexadecimal value of the physical service's IP address; 
ServicePort is the hexadecimal value of the physical service's port.
但是在NetScaler版本6.1和8.0关于这个cookie的插入动作有区别,如下: 
1, 在NetScaler NS6.1: Build 96上,cookieinsert这个动作是在同一个session的 每一个response里都插入的,不管timeout时间设置为多少(包括0); 
2, 而在NetScaler NS8.0: Build 53.2上,cookieinsert这个动作当设置时间为0时是在同一个session的 第一个response里插入的,后续的不会插入了(可以通过httpwatch查看证明,实际上这个改动在NS7.0就更新了)。但是将cookie的时间设置为非0时,cookieinsert这个动作是在同一个session的 每个response里都插入的,因为要告知client进行此cookie的时间更新。
一般最常用的session保持机制就是使用cookieinsert(0mins)为主,sourceip为backup机制。官方是这样说明原理的: 
The Backup persistence option is used when the primary configured persistence mechanism on virtual server fails. For example, if the primary persistence is Cookie Insert, the backup persistence can be set to Source IP to handle any client browsers that do not support cookies.
Any client browsers that do not support cookies,这句话值得我们深究。一般我们是认为当NetScaler完成了第一次response插入NSC后紧接着接收到的request中应该带有这个NSC,但是当没有这个NSC时,NetScaler就是用backup机制进行保持。但是实际上这是错误的。NetScaler怎样判断browser do not support cookies呢?原理如下: 
NS接收到下一个request时,会查看这个request的http头中是否存在cookie字段: 
■ Cookie字段存在,然后查看是否有NS自己插入的cookie(NSC) 
    √  如果存在就根据此NSC进行分发; 
    √  如果不存在或者NSC值错误(可能被篡改),就会根据lb的算法进行分发(原来理解为根据backup的方式); 
■ Cookie字段不存在,就根据backup的方式进行保持。
当然有些场景不需要我们了解到如此细致,就能够满足应用的需求做到session保持了。但是在某些场景(比如跨域访问,可以参见上篇博文"初识P3P”)就需要非常注意这个操作原理,否则就会出现session保持不了的情况。









本文转自 chris_lee 51CTO博客,原文链接:http://blog.51cto.com/ipneter/150993,如需转载请自行联系原作者

目录
相关文章
|
Kubernetes Java 测试技术
无忧微服务:如何实现大流量下新版本的发布自由
本文讨论了微服务上云过程中的稳定性挑战,特别是变更引起的生产故障。阿里云MSE(微服务引擎)提供了一种全链路无损发布方案,旨在消除变更风险,实现白天流量高峰时的安全发布。
1168 114
|
存储 安全 Java
深入理解 Java 多线程、Lambda 表达式及线程安全最佳实践
线程使程序能够通过同时执行多个任务而更有效地运行。 线程可用于在不中断主程序的情况下在后台执行复杂的任务。 创建线程 有两种创建线程的方式。 扩展Thread类 可以通过扩展Thread类并覆盖其run()方法来创建线程:
342 1
深入理解 Java 多线程、Lambda 表达式及线程安全最佳实践
|
Linux
linux xshell telnet 进去后如何退出
【8月更文挑战第27天】Telnet协议支持用户远程登录并操控另一台计算机。在Linux系统中结束Telnet会话可采用多种方式:直接输入"exit";利用快捷键Ctrl + ]后跟"quit";同样可通过Telnet命令结合快捷键"Ctrl + ]q"实现;此外,图形界面下直接关闭窗口也是一个简便的选择。用户可根据个人习惯及客户端类型选取合适的方法退出会话。
1459 4
|
运维 NoSQL MongoDB
MongoDB有必要升级新版本吗?
如果你在 MongoDB 升级时需要协助,阿里云的专家还将为您提供升级规划建议,识别和缓解升级时可能出现的障碍、不兼容问题和潜在的性能问题。
3036 1
|
网络安全
错误集--NFS报错clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
错误集--NFS报错clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
2088 0
错误集--NFS报错clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
|
JavaScript 前端开发 数据可视化
哪些 JS 框架支持 SPA 单页面应用
目前主流的JavaScript框架如React、Vue和Angular都支持SPA(单页面应用)开发,能够实现页面无刷新更新,提升用户体验。其他如Ember.js、Backbone.js等也具备SPA开发能力。
|
运维 关系型数据库 MySQL
《mysql慢查询追踪:动态设置与优化,一步到位解决数据库性能瓶颈》
【8月更文挑战第16天】在数据库运维中,监控与优化MySQL慢查询对提升性能至关重要。本文通过电商平台案例演示如何动态调整慢查询配置及分析过程。首先检查`long_query_time`和`slow_query_log`状态,若未开启,则需设置如`long_query_time = 2`并启动日志记录。在高并发时段收集慢查询日志后,分析发现无索引导致效率低下的查询,通过`explain`确认全表扫描,最终创建复合索引解决问题。此方法有助于快速定位并解决性能瓶颈。
760 1
|
Serverless Docker Python
函数计算操作报错合集之使用Kaniko构建镜像时遇到了报错,该怎么办
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
195 1
|
机器学习/深度学习 数据采集 算法
Python实现PCA降维和KNN人脸识别模型(PCA和KNeighborsClassifier算法)项目实战
Python实现PCA降维和KNN人脸识别模型(PCA和KNeighborsClassifier算法)项目实战
|
负载均衡 Kubernetes 网络协议
kubernetes--kube-proxy组件深入理解
每台机器上都运行一个kube-proxy服务’它监听API server中service和endpoint的变化情 况,并通过iptables等来为服务配置负载均衡(仅支持TCP和UDP)
723 0