Назад | Перейти на главную страницу

F5 Big-IP: оптимизация вложенного коммутатора iRule

F5 BIG-IP 10.2.4

Мой iRule должен точно соответствовать хосту и подстановочному знаку на пути.

when HTTP_REQUEST {
  switch [string tolower [HTTP::host]] {
    "internal.mycompany.com" {
      switch -glob [string tolower [HTTP::path]] {
          "/api1/*" {

Это оптимизировано как есть? Обеспечит ли реструктуризация как единый iRule дальнейшую оптимизацию?

set $host [string tolower [HTTP::host]] 
set $path [string tolower [HTTP::path]]        
set $host-uri = "$host/$path"
when HTTP_REQUEST {
  switch -glob [$host-uri] {
    "internal.mycompany.com/api1/*" {

Это зависит. Сколько доменных имен у вас на VIP? Если более одного, сколько URI под доменным именем у вас будет?

Если он будет выделен и вы будете обновлять его довольно часто, я бы предложил использовать группу данных, чтобы вам не приходилось постоянно изменять iRule. В противном случае это 6 из одного, полдюжины другого.

Что-то вроде ...

when HTTP_REQUEST {
   set URL [string tolower [HTTP::host][HTTP::uri]]
   if {[class match $URL starts_with some_data_group]} {
      <some_action_based_on_DG_value> [class match -value $URL starts_with some_data_group]
   }
}

Значением для элемента группы данных может быть URL-адрес перенаправления, пул, метод сохранения и т. Д.

Еще одно небольшое примечание; поскольку ваши операторы set выполняют команды irule, они должны находиться в контексте допустимого события (то есть [HTTP :: host] должен находиться внутри «when HTTP_REQUEST»).