Technical Forum
Ask questions. Discover Answers.
cancel
Showing results for 
Search instead for 
Did you mean: 

Help for setting policy /iRule

Sulabh_Srivasta
Altostratus
Altostratus

Hello All,

I have a scenario where I have to use only one HTTPS Virtual server for multiple applications listening on different ports on different node, for example:

There are 3 servers , Node_X, Node_Y, Node_Z and VIP resolve to ww.abc.com

 

https://www.abc.com/core ----> https://Node_X:10004/core/

https://www.abc.com/service ----> https://Node_X:10004/service/

 

https://www.abc.com/ims ----> https://Node_X:10009/ims/

 

https://www.abc.com/portal ----> https://:Node_Y:10005/portal/

 

https://www.abc.com/ords----> https://Node_Z:10008/ords/

 

I created 4 pools as below but didn't attach any pool to the Virtual server:

Pool_X for Node_X - port 10004

Pool_X1 for Node_X - port 10009

Pool_Y for Node_Y - port 10005

Pool_Z for Node_Z - port 10008

 

I am using the following iRule but is is not working, please help how can I achieve this ?? Can I use policy or re-write policy ??

 

when HTTP_REQUEST {

 if { [HTTP::uri] starts_with "/core" } {

    use pool Pool_X

  } elseif { [HTTP::uri] starts_with "/service" } {

    use pool Pool_X

} elseif } [HTTP::uri] starts_with "/ims" } {

    use pool Pool_X1

} elseif { [HTTP::uri] starts_with "/portal" } {

    use pool Pool_Y

} elseif { [HTTP::uri] starts_with "/ords" } {

    use pool Pool_Z

  }

}

1 ACCEPTED SOLUTION

Hi Sulabh Srivastana,

Remove use command.

when HTTP_REQUEST {
	if { [HTTP::uri] starts_with "/core" } {
		pool Pool_X
	} elseif { [HTTP::uri] starts_with "/service" } {
		pool Pool_X
	} elseif { [HTTP::uri] starts_with "/ims" } {
		pool Pool_X1
	} elseif { [HTTP::uri] starts_with "/portal" } {
		pool Pool_Y
	} elseif { [HTTP::uri] starts_with "/ords" } {
		pool Pool_Z
	}
}

switch version:

when HTTP_REQUEST {
	switch -glob [HTTP::uri] {
		"/core*" -
		"/service*" { pool Pool_X }
		"/ims*" { pool Pool_X1 }
		"/portal*" { pool Pool_Y }
		"/ords*" { pool Pool_Z }
	}
}

without using pool:

when HTTP_REQUEST {
	switch -glob [HTTP::uri] {
		"/core*" -
		"/service*" { node 1.2.3.4 10004 }
		"/ims*" { node 1.2.3.4 10009 }
		"/portal*" { node 5.6.7.8 10006 }
		"/ords*" { node 9.10.11.12 10008 }
	}
}

View solution in original post

4 REPLIES 4

Hi Sulabh Srivastana,

Remove use command.

when HTTP_REQUEST {
	if { [HTTP::uri] starts_with "/core" } {
		pool Pool_X
	} elseif { [HTTP::uri] starts_with "/service" } {
		pool Pool_X
	} elseif { [HTTP::uri] starts_with "/ims" } {
		pool Pool_X1
	} elseif { [HTTP::uri] starts_with "/portal" } {
		pool Pool_Y
	} elseif { [HTTP::uri] starts_with "/ords" } {
		pool Pool_Z
	}
}

switch version:

when HTTP_REQUEST {
	switch -glob [HTTP::uri] {
		"/core*" -
		"/service*" { pool Pool_X }
		"/ims*" { pool Pool_X1 }
		"/portal*" { pool Pool_Y }
		"/ords*" { pool Pool_Z }
	}
}

without using pool:

when HTTP_REQUEST {
	switch -glob [HTTP::uri] {
		"/core*" -
		"/service*" { node 1.2.3.4 10004 }
		"/ims*" { node 1.2.3.4 10009 }
		"/portal*" { node 5.6.7.8 10006 }
		"/ords*" { node 9.10.11.12 10008 }
	}
}

Sulabh_Srivasta
Altostratus
Altostratus

Hi Enes,

 

Thanks for your response, I tried but none of the given solution is working. Please let me know if I am missing something.

 

Hi,

when HTTP_REQUEST {
	log local0. "requri0: [HTTP::uri] - cip: [IP::client_addr]"
	if { [HTTP::uri] starts_with "/core" } {
		log local0. "requri1: [HTTP::uri] - cip: [IP::client_addr]"
		pool Pool_X
	} elseif { [HTTP::uri] starts_with "/service" } {
		log local0. "requri2: [HTTP::uri] - cip: [IP::client_addr]"
		pool Pool_X
	} elseif { [HTTP::uri] starts_with "/ims" } {
		log local0. "requri3: [HTTP::uri] - cip: [IP::client_addr]"
		pool Pool_X1
	} elseif { [HTTP::uri] starts_with "/portal" } {
		log local0. "requri4: [HTTP::uri] - cip: [IP::client_addr]"
		pool Pool_Y
	} elseif { [HTTP::uri] starts_with "/ords" } {
		log local0. "requri5: [HTTP::uri] - cip: [IP::client_addr]"
		pool Pool_Z
	}
}

Can you investigate the logs on cli and pool stats on gui?

tailf /var/log/ltm | grep requri

Sulabh_Srivasta
Altostratus
Altostratus

I can see client IP as my IP (I am the tester) and SNAT IP, the iRule is being executed but traffic is not hitting the pool, no hits on pool.