论坛首页 综合技术论坛

贴几个自己写的BigIP F5的iRule

浏览 8995 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-11-30  

折腾了几天的BigIP F5的iRule,终于折腾出了项目需要的,顺便也把几个练习和测试的iRule在这儿贴一下,给有需要的兄弟参考吧。

Tcl/Tk  代码
  1. #======================================#   
  2. #    几个BigIP F5 iRule的习作           #   
  3. # Author: BrokenStone                  #   
  4. # mail: wdmsyf@yahoo.co                #   
  5. # 2006.11.30                           #   
  6. #======================================#   
  7.   
  8.  
  9. iRule name: Redirect_when_Busi_Down    
  10. #当业务功能Pool里没有活动成员时,则转向到信息发布Pool   
  11. when LB_FAILED {   
  12.   #如果当前Pool中没有active的成员时才进行转换   
  13.   if { [active_members BUSI_HTTP_POOL] == 0 } {   
  14.     set DEBUG 1   
  15.     set internal_host "145.24.216.106";       #网站内网地址    
  16.      set external_host "www.shineauto.cn";  #网站域名    
  17.      set msg_url "/common/xtwh.do";            #错误提示URL   
  18.     set internal_IP "145.24.216";             #认为是内网地址的关键字   
  19.      set cip [IP::client_addr];                #客户端IP    
  20.     set host $external_host;                  #要转向的服务器地址    
  21.   
  22.     #如果客户端IP包含 $internal_IP (内部IP),则使用内部IP进行转向;   
  23.     #否则认为是外部用户,使用域名进行转向   
  24.      if { $cip starts_with $internal_IP }{   
  25.       set host $internal_host   
  26.     } else {   
  27.       set host $external_host   
  28.     }   
  29.     if { $DEBUG } {   
  30.       log local0. "URL:  http://$host/$msg_url"   
  31.     }   
  32.     HTTP::fallback "http://$host/$msg_url"   
  33.   } else {   
  34.     #如果当前Pool中还有Active的member,则重新选择   
  35.     LB::reselect   
  36.   }   
  37. }   
  38. #这是测试rule   
  39. when HTTP_REQUEST {   
  40.   set DEBUG 1   
  41.   if { $DEBUG } {   
  42.     set internal_IP "145.24.216";             #认为是内网地址的关键字   
  43.     set cip [IP::client_addr];                #客户端IP    
  44.     if { $cip starts_with $internal_IP } {   
  45.       log local0. "From internal..."   
  46.     } else {   
  47.       log local0. "From external..."   
  48.     }   
  49.   }   
  50. }   
  51.   
  52. ##====================================   
  53. iRule name: Insert_ClientIP_to_header   
  54. #在往服务器上提交的Http请求头中增加客户端实际IP地址,   
  55. #在应用中可以这样取客户端IP(java代码):   
  56. #String clientIP = request.getHeader("Client-IP");   
  57. when HTTP_REQUEST {   
  58.   HTTP::header insert Client-IP [IP::client_addr];   
  59. }   
  60. #when HTTP_RESPONSE {   
  61. #  #HTTP::header insert Server-IP [IP::server_addr]   
  62. #  clientside { HTTP::header replace Host [IP::server_addr] }   
  63. #}   
  64.   
  65. ##====================================   
  66. iRule name: Select_Pool_By_Query_String   
  67. #根据URI中的关键字选择相应的POOL   
  68. when HTTP_REQUEST {   
  69.   #报表报送功能转向到报表专用POOL   
  70.   if { [HTTP::uri] starts_with "/bbbs" } {   
  71.     pool REPORT_HTTP_POOL   
  72.   }   
  73.   #其他要特殊处理的情况   
  74.   #elsif {} {}   
  75. }   
  76.   
  77. ##======================================   
  78. iRule name: Replace_Host_String_For_External    
  79. #对于外部访问的请求,把页面中本地地址替换成域名   
  80. when HTTP_RESPONSE_DATA  {   
  81.   set find "145.24.216.106"   
  82.   set replace "www.shineauto.cn"   
  83.   set payload [HTTP::payload]   
  84.   set cip "[IP::client_addr]"   
  85.   #if { not ( [IP::addr [IP::remote_addr] equals 145.24.0.0 netmask 255.255.248.0] ) } {   
  86.   #  if {[regsub -all $find $payload $replace new_response] > 0} {   
  87.   #    HTTP::payload replace 0 [HTTP::payload len] $new_response    
  88.   #  }   
  89.   #}   
  90.   
  91.   #下面是测试时内部地址时使用的   
  92.   #if { [ $cip starts_with 145.24.32] } {   
  93.     if {[regsub -all $find $payload $replace new_response] > 0} {   
  94.       HTTP::payload replace 0 [HTTP::payload len] $new_response    
  95.     }   
  96.   #}   
  97. }   
  98.   
  99. ##========================================   
  100. iRule name: Check_Client_IP_Select_POOL    
  101. #根据客户端IP选择不同的Pool   
  102. when CLIENT_ACCEPTED {   
  103.   if { [IP::addr [IP::remote_addr] equals 145.24.32.0/255.255.248.0] } {   
  104.     pool BUSI_HTTP_POOL   
  105.   } else {   
  106.     pool CMS_HTTP_POOL   
  107.   }   
  108. }   
  109.   
  110. ##========================================   
  111. ##替换Server返回页面中的所有匹配内容, 好像别的产品都没法做到吧   
  112. when HTTP_RESPONSE_DATA {   
  113.   set find "145.24.216.212"   
  114.   set replace "==It's bad(服务器信息)==145.24.216.212"   
  115.   set payload [HTTP::payload]   
  116.   if {[regsub -all $find $payload $replace new_response] > 0} {   
  117.     HTTP::payload replace 0 [HTTP::payload len] $new_response    
  118.   }   
  119. }  
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics