If you want to check iRule, you shuoud restart the browser.
when HTTP_REQUEST {
if {[HTTP::uri] starts_with "/contatcts/"} {
HTTP::redirect "https://[HTTP::host][HTTP::uri]"
return
}
}
when HTTP_REQUEST {
if { [HTTP::uri] starts_with "/abc/" } {
HTTP::uri [string map {"/abc/" "/xyz/"} [HTTP::uri]]
}
}
when HTTP_REQUEST {
if { [HTTP::uri] equals "/"} {
HTTP::redirect "https://[HTTP::host]/en/"
return
}
}
when HTTP_REQUEST {
if {([HTTP::uri] contains "server1")&&([active_members http_pool_server1]>0)} {
pool http_pool_server1
return
}
elseif {([HTTP::uri] contains "server2")&&([active_members http_pool_server2]>0)} {
pool http_pool_server2
return
}
else{
pool Pools_Sorry
return
}
}
if { [HTTP::uri] starts_with "/uk" } {
set uri [string map -nocase {"/uk" "/jp"} [HTTP::uri]]
HTTP::redirect $uri
return
}
Log File is /var/log/ltm.
when HTTP_REQUEST {
set country [whereis [IP::client_addr] country]
log local0. "Country is $country"
}
when HTTP_REQUEST {
set LogString "Client [IP::client_addr]:[TCP::client_port] -> [HTTP::host][HTTP::uri]"
log local0. "============================================="
log local0. "$LogString (request)"
foreach aHeader [HTTP::header names] {
log local0. "$aHeader: [HTTP::header value $aHeader]"
}
log local0. "============================================="
}
when HTTP_RESPONSE {
log local0. "============================================="
log local0. "$LogString (response) - status: [HTTP::status]"
foreach aHeader [HTTP::header names] {
log local0. "$aHeader: [HTTP::header value $aHeader]"
}
log local0. "============================================="
}
when HTTP_REQUEST {
set country "[whereis [IP::client_addr] country]"
if { $country equals "US" } {
HTTP::redirect "http://maintenance.example.com/"
return
}
}
BIG-IP from Ver11 can use websockets like https. so you don't need iRule.
when CLIENT_ACCEPTED {
HTTP::enable
}
when HTTP_REQUEST {
if { [matchclass [HTTP::uri] starts_with $::MyValidUris] } [
#WebSockets
use pool Pools_WEB_80
HTTP::disable
} else {
#http
HTTP::respond 404 content [subst $::block_page]
}
}
when CLIENT_ACCEPTED {
HTTP::enable
}
when HTTP_REQUEST {
if { ([HTTP::uri] starts_with "/the-websocket-uri") } {
#WebSockets
use pool Pools_WEB_80
HTTP::disable
} elseif { not ( [class match [HTTP::uri] starts_with UnrestrictedUris] ) } {
# Drop the request
drop
}
}
when HTTP_REQUEST {
if { [string tolower [HTTP::header Upgrade]] contains "websocket" }{
HTTP::disable
}
}
SOL14814: The BIG-IP system may drop WebSocket traffic
For BIG-IP versions later than 11.4.0, you can use a single virtual server with an HTTP profile.
For BIG-IP versions earlier than 11.4.0, consider using a separate virtual server with the applicable profile for each protocol.
SOL14754 - BIG-IP support for the WebSocket protocol
when HTTP_REQUEST {
if { [active_members [LB::server pool]] == 0 } {
HTTP::redirect "http://sorry.example.com/"
}
}
when HTTP_REQUEST {
if {[active_members Pools_tet]==0} {
HTTP::redirect "http://maintenance.example.com/"
}
}
persist cookie use pool Pools_Test
pool Pool_1 persist cookie insert
pool Pool_1 persist cookie insert lb 0
when HTTP_RESPONSE {
set cookieName "mycountry"
set country "[whereis [IP::client_addr] country]"
HTTP::cookie insert name ${cookieName} value ${country} path "/" domain "example.com"
HTTP::cookie expires ${cookieName} 100
}
when HTTP_REQUEST {
if { [HTTP::cookie exists "JSESSIONID"] } {
persist uie [HTTP::cookie "JSESSIONID"]
}
if { [HTTP::uri] starts_with "/test" } {
use pool Pools_TEST
return
}
else {
set jsess [findstr [HTTP::uri] "JSESSIONID" 11 ";"]
if { $jsess != "" } {
persist uie $universal-profile-name
}
}
}
when HTTP_RESPONSE {
if { [HTTP::cookie exists "JSESSIONID"] } {
persist add uie [HTTP::cookie "JSESSIONID"]
}
}
This works fine and when all pool members are down or unavailable, requests are sent to the sorry page.
when HTTP_REQUEST {
#abbr
pool test-pool
#abbr
}
when LB_FAILED {
HTTP::fallback "http://maintenance.example.com/"
return
}
when HTTP_REQUEST {
#abbr
set test 1
pool test-pool1
} else {
set test 2
pool test-pool2
}
#abbr
}
when LB_FAILED {
switch $test {
1 {
HTTP::fallback "http://maintenance1.example.com/"
return
}
2 {
HTTP::fallback "http://maintenance2.example.com/"
return
}
}
}