Forum Discussion
iRule for HTTP redirect with URL based to specific pool member
Hi There,
I am working on an iRule for redirection URLs and distribute traffic to the specific pool members. below is a requirement
F5 VS perform SSL offload
HTTP profile with "all" rewrite_redirect enable
F5 pool "http_pool" contain
pool member = server_1 (10.1.20.11:80)
pool member = server_2 (10.1.20.12:80)
Redirect URLs
- From https://abc.com/map1/abc/services TO https://abc.com/land/abc/services then send this traffic to pool member "server_1:80"
- From https://abc.com/map2/abc/services TO https://abc.com/land/abc/services then send this traffic to pool member "server_2:80"
- Discard traffic accessing https://abc.com/map1/admin and https://abc.com/map2/admin
- Discard other paths https://abc.com/*
My iRule so far below
when HTTP_REQUEST {
switch -glob [string tolower [HTTP::uri]] {
/map1/admin* -
/map2/admin* {
drop
log "Drop direct connection via admin URI"
}
/map1* {
pool http_pool member 10.1.20.11 80
HTTP::redirect [string map {"map1" "land"} [HTTP::uri]]
log "redirect [HTTP::uri] to [LB::server addr]"
}
/map2* {
pool http_pool member 10.1.20.12 80
HTTP::redirect [string map {"map2" "land"} [HTTP::uri]]
log "redirect [HTTP::uri] to [LB::server addr]"
}
/land* {
pool http_pool <<<<<<<<< with this traffic will load balancing among them rather than direct to single server
}
default {
drop
log "Disallow [HTTP::uri]"
}
}
}
It is partial works so far. Traffic redirects to /land/ then it will hit the catch on pool configuration. This won't meet the requirement no.1/2 as the traffic need to go to the different pool member. I attempt to insert a specific cookie as part of the redirect condition, update the /land/ with a defined cookie name, and send it out to a particular node. Still not working. Would you mind shade me some light to get it works?
Thanks
CK
3 Replies
- xuwen
Cumulonimbus
you should use HTTP::uri to rewrite client's http request uri,
iRules:
when HTTP_REQUEST {
switch -glob [string tolower [HTTP::uri]] {
"/map1/admin*" -
"/map2/admin*" {
drop
log "Drop direct connection via admin URI"
}
"/map1/*" {
HTTP::uri [string map {"map1" "land"} [HTTP::uri]]
pool http_pool member 10.1.20.11 80
}
"/map2/*" {
HTTP::uri [string map {"map2" "land"} [HTTP::uri]]
pool http_pool member 10.1.20.12 80
}
"/land/*" {
pool http_pool
}
default {
drop
}
}
}
- charkitp
Nimbostratus
Thanks, xuwan for your response. i'll retest the iRule and confirm the soltuion
CK
- Angelo_V
Cirrus
[OT]
have you considered using a policy instead of an irule?
(I find them much more maintainable and even if they are less flexible they should do what you ask)
Help guide the future of your DevCentral Community!
What tools do you use to collaborate? (1min - anonymous)Recent Discussions
Related Content
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com
