URI HASH persistence based on URI depth and string length
Problem this snippet solves:
When dealing with caching or AV analysis systems, we may need to define a static persistence method to maximize hits and performances on backend servers.
How to use this snippet:
Installation
You just need to assign the irule to a standard Virtual Server. The VS require at least an http profile and ssl profiles (if doing ssl offloafing or ssl bridging)
Variables
- static::lb_depth - define a subset of the path to use for HASH calculation
- static::lb_len - define the number of chars to retrieve in the path for HASH calculation
- static::timeout - define the timeout of the persistence record
Features
- Universal persistence
- Persistence using URI Hash
- Specify a depth and/or a string length to get a subset of the URI for the Hash calculation
Code :
when RULE_INIT {
# define the depth of the path that will be used for HASH calculation
set static::lb_depth 5
# lb_len variable should be set to 0 if you don't want to use it
set static::lb_len 0
set static::timeout 3600
}
when HTTP_REQUEST {
# initialize required variables
set path [string tolower [HTTP::path]]
set depth [URI::path [HTTP::uri] depth]
# define the depth of the path for hash calculation
if { $depth < $static::lb_depth } {
set depth_path [HTTP::path]
} else {
set depth_path [URI::path [HTTP::uri] 1 $static::lb_depth]
}
set len [string length $depth_path]
# define the chars length to be processed for hash calculation
if { $static::lb_len > 0 and $static::lb_len < $len } {
binary scan [sha1 [string range $depth_path 0 $static::lb_len-1]] w1 key
} else {
binary scan [sha1 $depth_path] w1 key
}
persist uie $key $static::timeout
}Tested this on version:
11.3Published Jul 27, 2016
Version 1.0Yann_Desmarest
Cirrus
Joined September 11, 2012
Yann_Desmarest
Cirrus
Joined September 11, 2012
No CommentsBe the first to comment