F5是非常强大的商业负载均衡器。除了处理性能强劲,以及高稳定性之外,F5还可以通过irules编写强大灵活的转发规则,实现web业务的灵活应用。

irules是基于TCL语法的,每个iRules必须包含事件、命令和逻辑三部分才可以有效运行。

f5负载均衡配置策略(F5负载均衡器如何通过irules实现应用的灵活转发)(1)

irules基本格式

irules常用的逻辑运算符:contains 包含、equals(==) 等于、starts_with 以开始、ends_with 以结束,另外还支持正则表达式,需要复杂的匹配规则也可以使用正则表达式。

以上为F5 irules的基本语法及常用的逻辑运算符,那么今天主要来介绍一下,如何通过编写irules来实现http应用的灵活转发。需要注意的是,要通过irules做http的转发处理,必须使用七层负载均衡模式,即F5的standard模式才可实现,四层负载均衡模式工作在传输层相当于是直通模式,是不能改变http转发请求的。

场景一:基于请求的域名转发

由于公网IP有限,通过F5七层负载均衡发布Web应用,可以实现公网IP的收敛,即一个公网IP可以对应多个业务的发布。具体为可以根据请求的域名来做转发。比如说请求者访问A域名,转发到后端A服务器。请求访问B域名,转发到后端B服务器。这个功能,叫做虚拟主机功能,是比较常用的。

例如,现在我有一个公网IP:10.1.1.1,我有两个WEB应用对应的域名为news.aaa及sports.aaa;后端服务器分别为pool_news及pool_sports。那么下面就介绍如何使用irules来实现虚拟主机的功能。

when HTTP_REQUEST { if { [HTTP::host] equals "news.aaa" } { pool pool_news } elseif { [HTTP::host] equals "sports.aaa" } { pool pool_sports } }

是不是非常简单,只需要根据tcl语言的格式,先做个事件声明为http request请求,再通过if else的条件判断语句,即可实现虚机主机功能,原理就是通过http头部的host字段来识别请求,根据不同的域名转发的不同的后端应用中。

场景二:基于请求的URL转发

除了通过二级域名发布不同的业务,然后通过七层虚拟主机的方式转发到对应后端的方式外,比较常用的就是同一个域名不同的URL来对应不同的应用。比如请求者访问的URL包含A目录,就转发到A服务器;请求访问的URL包含B目录,就转发到B服务器。

例如,我有一个网站,分别有读书跟电影两个频道,用户点击或访问不同的目录即进到不同频道的页面。读书 aaa/read、电影 aaa/movie。那么,通过irules可以这么实现。

when HTTP_REQUEST { if { [HTTP::uri] starts_with"/read" } { pool pool_read } elseif { [HTTP::uri] starts_with "/movie" } { pool pool_movie } }

是不是也很简单呢。

场景三:动静分离

在说动静分离之前,说明一下,irules的if else也是可以支持嵌套的方式编写的,这样就可以非常灵活的编写转发规则。那么下面就以结合动静分离的例子来演示下嵌套的方式如何编写。

动静分离的实现,通常是将请求的图片如jpg、png或视频等分发到专门的静态资源服务器如Nginx上,动态页面则分发到tomcat服务器上,从而提升网站的访问效率。下面就举例如何编写irules来实现动静分离。

when HTTP_REQUEST { if { [HTTP::host] equals "aaa" } { if { [HTTP::uri] contains ".js" or [HTTP::uri] contains ".css" or [HTTP::uri] contains ".jpg"} { pool pool_static_nginx } else { pool pool_aaa_srv } } elseif { [HTTP::host] equals "bbb" } { if { HTTP::uri] starts_with"/html"} { pool pool_static_nginx } else { pool pool_bbb_srv } } }

以上就是以嵌套的形式来编写动静分离的irules,可以看到对应aaa站点及bbb站点,静态资源服务器是共用的pool_static_nginx,而动态资源是转发到对应的后端服务器上。

总结

从以上的介绍及案例,可以看出,F5通过irules可以实现非常强大及灵活的七层转发策略,所举的例子只是irules应用的冰山一角,例子只是日常非常常用的策略,还可以做更多的事情。其实通过nginx或haproxy大部分场景也能够实现,大家可以参考进行配置。希望此次分享能对大家有所帮助!

,