应用交付脚本工具在HTTP服务中的应用

简介:

可编写脚本在应用交付(负载均衡)中是个相当关键的功能,它是负载均衡策略灵活性的最佳体现。虽然对于没有软件开发基础的技术同仁来说,脚本编写可能是一个“噩梦”,面对着那“神奇”的字符串,敝人也感同身受。为此,我搜集了一些脚本范例,特别是针对常用的HTTP流量的优化,为大家做个借鉴。

范例一:将HTTP的请求自动转换为HTTPS。这个脚本比较简单,但在很多电商网站或基于HTTPS访问的客户会用得比较多。

when HTTP_REQUEST {

HTTP::redirecthttps://[HTTP::host][HTTP::uri]

}

脚本说明:只要负载均衡收到HTTP的请求包,就以HTTP重定向的方式转换为HTTPS://加上域名和路径。


范例二:根据客户端请求的URI路径不同,分发至指定的服务器组(pool)。在一些客户的业务设计中,后台只有一台物理服务器(同一个IP地址同一个服务端口),但可根据路径的不同发布不同的业务,这时候就需要根据路径的关键字来区分业务。

when HTTP_REQUEST {

if {[HTTP::uri] starts_with"/test1" } {

pool pool_server1

} elseif {[HTTP::uri] starts_with"/test2" } {

pool pool_server2

} else } {

pool pool_server

}

}

脚本说明:当客户端请求的路径为“/test1”则分配给server1,当客户端请求的路径为“/test2”则分配给server2,其它请求都转发至默认的服务器组。


范例三:根据客户端浏览器默认语言设定自动选取对应国家语言的服务器群集。

when HTTP_REQUEST {

if { [HTTP::headeraccept-language] contains “es” } {

poolSpanish

} elseif { [HTTP::headeraccept-language] contains “ja” } {

poolJapanese

} elseif { [HTTP::headeraccept-language] contains “zh” } {

pool Chinese

} else {

poolEnglish

}

}

215635627.jpg

范例四:判断某虚拟服务器某端口业务(vport)的当前链接数,超过阀值后重定向到指定页面!~既能保护后台服务器,也能在接收到异常的大并发连接时提供友好的备份服务。

when HTTP_REQUEST {

set total1 [STATS::get virtual-servervs_192.168.111.45 8080 http current-connection]

if { $total1 > 100 } {

HTTP::redirect"http://www.163.com/"

}

}

脚本说明:当访问虚拟服务器192.168.111.45的8080端口的并发连接数大于100,后续请求都重定向至其他可访问的站点,如www.163.com


范例五:根据HTTP报文头的sessionID来做会话保持。某些网站是不能简单的采用源IP会话保持的策略,在开发时采用sessionID来标示会话信息。通过HTTPwatch工具,查看到客户的sessionID 是藏于cookies中:

Cookie内容:

ASP.NET_SessionId=rrwjbhbv1w4qgm553usoqqq3;MyCook=visitCount=1

使用以下脚本,在URI中查找“ASP.NET_SessionId”字段,就可以获取到sessionID,并进行会话保持。

when HTTP_REQUEST {

set session_id [findstr[HTTP::uri] "ASP.NET_SessionId=" 18 ";"]

if { ( $session_id eq"" ) and ( [HTTP::cookie exists ASP.NET_SessionId] ) } {

set session_id[HTTP::cookie ASP.NET_SessionId]

}

if { $session_id ne"" } {

persist uie $session_id

}

}

215658948.jpg

以上只是在HTTP环境中会经常遇到的脚本应用,脚本工具的强大远不止于此,藉此也希望更多的技术同仁能领略脚本工具的魅力所在,编写出更具Power的脚本范例,大家共同进步。


(ZJM)


本文转自 virtualadc 51CTO博客,原文链接:http://blog.51cto.com/virtualadc/1297238




相关文章
|
1月前
|
Java Maven Windows
使用Java创建集成JACOB的HTTP服务
本文介绍了如何在Java中创建一个集成JACOB的HTTP服务,使Java应用能够调用Windows的COM组件。文章详细讲解了环境配置、动态加载JACOB DLL、创建HTTP服务器、实现IP白名单及处理HTTP请求的具体步骤,帮助读者实现Java应用与Windows系统的交互。作者拥有23年编程经验,文章来源于稀土掘金。著作权归作者所有,商业转载需授权。
使用Java创建集成JACOB的HTTP服务
|
28天前
|
安全 网络协议 应用服务中间件
AJP Connector:深入解析及在Apache HTTP Server中的应用
【9月更文挑战第6天】在Java Web应用开发中,Tomcat作为广泛使用的Servlet容器,经常与Apache HTTP Server结合使用,以提供高效、稳定的Web服务。而AJP Connector(Apache JServ Protocol Connector)作为连接Tomcat和Apache HTTP Server的重要桥梁,扮演着至关重要的角色
47 2
|
4天前
|
关系型数据库 MySQL 数据库
vertx 的http服务表单提交与mysql验证
本文介绍了如何使用Vert.x处理HTTP服务中的表单提交,并通过集成MySQL数据库进行验证,包括项目依赖配置、表单HTML代码和完整的Vert.x服务代码。
11 2
|
6天前
|
JavaScript 安全 Java
谈谈UDP、HTTP、SSL、TLS协议在java中的实际应用
下面我将详细介绍UDP、HTTP、SSL、TLS协议及其工作原理,并提供Java代码示例(由于Deno是一个基于Node.js的运行时,Java代码无法直接在Deno中运行,但可以通过理解Java示例来类比Deno中的实现)。
27 1
|
5天前
|
JSON API 开发者
深入解析Python网络编程与Web开发:urllib、requests和http模块的功能、用法及在构建现代网络应用中的关键作用
深入解析Python网络编程与Web开发:urllib、requests和http模块的功能、用法及在构建现代网络应用中的关键作用
10 0
|
1月前
|
安全 网络安全 数据安全/隐私保护
HTTP与HTTPS协议区别及应用场景
在互联网高速发展的今天,HTTP与HTTPS作为数据传输的基石,作用至关重要。HTTP允许客户端与服务器间传输超文本文档,但其数据传输过程未加密,存在安全隐患;HTTPS则在此基础上加入了SSL/TLS协议,实现了数据加密传输,增强了安全性,广泛应用于电子商务、网上银行、政府网站及社交媒体平台等涉及敏感信息传输的领域,有效保护了用户隐私和数据安全。随着网络安全意识提升,HTTPS正逐渐成为主流。
|
2月前
|
Web App开发 存储
常见抓包工具配置抓取HTTPS
常见抓包工具配置抓取HTTPS
|
2月前
|
机器学习/深度学习 Ubuntu Linux
在Linux中,如何按照该要求抓包:只过滤出访问http服务的,目标ip为192.168.0.111,一共抓1000个包,并且保存到1.cap文件中?
在Linux中,如何按照该要求抓包:只过滤出访问http服务的,目标ip为192.168.0.111,一共抓1000个包,并且保存到1.cap文件中?
|
2月前
|
缓存 数据安全/隐私保护 UED
代理服务器在HTTP请求中的应用:Ruby实例
代理服务器在HTTP请求中的应用:Ruby实例
|
3月前
|
运维 Serverless API
Serverless 应用引擎使用问题之如何开发HTTP服务
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。