![F5 Big-IP:嵌套交换机的iRule优化](https://linux22.com/image/802141/F5%20Big-IP%EF%BC%9A%E5%B5%8C%E5%A5%97%E4%BA%A4%E6%8D%A2%E6%9C%BA%E7%9A%84iRule%E4%BC%98%E5%8C%96.png)
F5 BIG-IP 10.2.4
我的 iRule 需要在主机上精确匹配,并在路径上通配符匹配。
when HTTP_REQUEST {
switch [string tolower [HTTP::host]] {
"internal.mycompany.com" {
switch -glob [string tolower [HTTP::path]] {
"/api1/*" {
这已经是优化了吗?重新构建为单个 iRule 是否会提供进一步的优化?
set $host [string tolower [HTTP::host]]
set $path [string tolower [HTTP::path]]
set $host-uri = "$host/$path"
when HTTP_REQUEST {
switch -glob [$host-uri] {
"internal.mycompany.com/api1/*" {
答案1
视情况而定。您在 VIP 上有多少个域名?如果不止一个,您在域名下有多少个 URI?
如果要分配,并且您将经常更新它,那么我建议使用数据组,这样您就不必一直修改 iRule。否则,就是 6 个一,6 个另一。
大致是——
when HTTP_REQUEST {
set URL [string tolower [HTTP::host][HTTP::uri]]
if {[class match $URL starts_with some_data_group]} {
<some_action_based_on_DG_value> [class match -value $URL starts_with some_data_group]
}
}
数据组项的值可以是重定向 URL、池、持久性方法等。
另外一个快速说明;由于您的 set 语句正在执行 irule 命令,因此它们需要位于有效事件的上下文中(即 [HTTP::host] 必须位于“when HTTP_REQUEST”内)。