Forum Discussion
Joe_Erchul_4263
Nimbostratus
Feb 28, 2013iRule to redirect users to a pool based on POST data
Gang,
I'm trying to direct a subset of my users to different pools based on their POST data. This is what I have thusfar:
when HTTP_REQUEST {
if { [HTTP::metho...
nitass
Employee
Mar 01, 2013the irule looks okay to me.
have you run tcpdump? was there any suspicious there?
tcpdump -nni 0.0:nnn -s0 -w /var/tmp/output.pcap host x.x.x.x or host y.y.y.y and port zzz
x.x.x.x is virtual server ip
y.y.y.y is pool member ip
zzz is port number
this is my testing.
[root@ve10:Active] config b virtual bar list
virtual bar {
snat automap
destination 172.28.19.252:80
ip protocol 6
rules myrule
profiles {
http {}
tcp {}
}
}
[root@ve10:Active] config b rule myrule list
rule myrule {
when HTTP_REQUEST {
if { [HTTP::method] equals "POST" } {
if {[HTTP::header exists "Content-Length"] && [HTTP::header "Content-Length"] <= 1048576} {
set content_length [HTTP::header "Content-Length"]
} else {
set content_length 1048576
}
HTTP::collect $content_length
}
}
when HTTP_REQUEST_DATA {
if { (([HTTP::payload] contains "end-user=aaaaa") or
([HTTP::payload] contains "end-user=bbbb") or
([HTTP::payload] contains "end-user=zzzzz"))} {
log local0. "User redirected"
pool A_pool
} else {
pool B_pool
}
}
when HTTP_RESPONSE {
log local0. "cs [IP::client_addr]:[TCP::client_port] > [clientside {IP::local_addr}]:[clientside {TCP::local_port}] ss [IP::local_addr]:[TCP::local_port] > [IP::remote_addr]:[TCP::remote_port] pool [LB::server pool]"
}
}
[root@ve10:Active] config b pool A_pool list
pool A_pool {
members 200.200.200.101:80 {}
}
[root@ve10:Active] config b pool B_pool list
pool B_pool {
members 200.200.200.111:80 {}
}
end-user=aaaaa payload
[root@ve10:Active] config curl --data "end-user=aaaaa" http://172.28.19.252/
This is 101 host.
[root@ve10:Active] config cat /var/log/ltm
Mar 1 17:58:46 local/tmm info tmm[22185]: Rule myrule : User redirected
Mar 1 17:58:46 local/tmm info tmm[22185]: Rule myrule : cs 172.28.19.253:48674 > 172.28.19.252:80 ss 200.200.200.10:48674 > 200.200.200.101:80 pool A_pool
end-user=somethingelse payload
[root@ve10:Active] config curl --data "end-user=somethingelse" http://172.28.19.252/
This is 111 host.
[root@ve10:Active] config cat /var/log/ltm
Mar 1 18:00:11 local/tmm info tmm[22185]: Rule myrule : cs 172.28.19.253:48685 > 172.28.19.252:80 ss 200.200.200.10:48685 > 200.200.200.111:80 pool B_pool
Help guide the future of your DevCentral Community!
What tools do you use to collaborate? (1min - anonymous)Recent Discussions
Related Content
DevCentral Quicklinks
* 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
Discover DevCentral Connects