`

贴几个自己写的BigIP F5的iRule

阅读更多

折腾了几天的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. }  
分享到:
评论

相关推荐

    F5BIGIP宝典

    BIGIP实现应用流量管理主要依赖以下几个核心元素: 1. **VirtualServer**:这是BIGIP对外提供服务的虚拟地址和端口,它可以将流量导向一个或多个Pool。 2. **Profile**:Profile是一组针对特定网络流量类型的配置...

    F5-BigIP-V9-TO-V10系统安装升级手册

    在进行F5 BigIP系统升级之前,有几项关键工作需要完成: 1.1 升级环境:确保当前运行的V9系统稳定且适合升级,检查硬件兼容性,确保网络连接正常,以及备份现有配置和数据,以防升级过程中出现问题。 1.2 准备安装...

    F5 BIGIP V9 标准配置文档.rar

    F5 BIGIP V9由几个核心组件组成,包括本地流量管理器(LTM)、全局流量管理器(GTM)、应用安全管理器(ASM)和iControl REST API等。LTM主要负责负载均衡任务,GTM处理全局负载分发,ASM确保应用安全性,而iControl...

    F5-common- mib

    F5的MIBs通常会涵盖以下几个核心领域: 1. **负载均衡**:这包括虚拟服务器、池成员、会话状态和流量统计等对象,可以帮助管理员监控和调整负载分布,确保应用服务的高可用性。 2. **性能指标**:例如CPU和内存...

    Python库 | pulumi_f5bigip-0.2.7.dev1565046886.tar.gz

    在“pulumi_f5bigip”库中,主要包含以下几个方面的知识点: 1. **Pulumi框架**:Pulumi是基于云的IaC工具,支持多种编程语言,包括Python。它通过抽象化云资源为程序对象,使得开发者可以像操作普通代码一样管理...

    BIGIP组网架构

    本文将基于提供的内容片段,详细介绍几种常见的F5 LTM组网架构模式,并深入探讨每种模式的工作原理及应用场景。 #### 二、F5 LTM 组网架构模式详解 ##### 1. 单臂接入模式 **定义**:单臂接入模式是指LTM仅通过一...

    terraform-azure-bigip-demo:演示展示Azure上F5 BIG-IP的部署和配置的演示

    在这个演示中,我们将深入探讨以下几个关键知识点: 1. **Terraform**:Terraform是一种开源工具,用于定义、部署和管理跨多个提供商的基础设施。它通过HCL进行配置,允许用户声明性地描述他们希望构建的基础设施。...

    F5培训内部课件

    - **注册与License激活**:注册过程包括几个步骤,包括生成注册密钥、发送请求至F5许可服务器、生成许可文件、将许可文件导入设备等。 - **资源分配**:配置完成后,需要分配各项资源,包括但不限于LTM、GTM等功能...

    F5四层交换机配置

    配置F5 BIG-IP四层交换机的本地流量管理涉及到以下几个主要步骤: 1. **创建虚拟服务器**:虚拟服务器是对外提供服务的逻辑入口,它定义了监听的IP地址和端口,以及分配流量的方式。在配置时,需要根据实际需求选择...

    F5巡检手册 F5巡检手册

    F5 BigIP 设备的前面板主要包括以下几部分: - **10/100/1000 接口**:支持多个 10/100/1000M 自适应网络接口,用于与其他设备进行连接。 - **千兆光纤接口 (Gigabit Fiber Interface)**:提供多个 1000M 多模光纤...

    bigip-tmsh-11-2-0命令手册

    BIG-IP是F5 Networks公司开发的一系列高性能网络设备和服务解决方案,用于负载均衡、流量管理、安全控制等多个方面。而Traffic Management Shell(简称tmsh)则是BIG-IP系统中用于管理和配置网络服务的强大工具。...

    F5-BIG-IP标准配置安装文档.doc

    网络配置**\n\n网络配置是BIG-IP部署的关键步骤,主要包括以下几个部分:\n\n- **L2 Vlan配置**:VLAN(虚拟局域网)用于逻辑上分割网络,以提高安全性并管理流量。在BIG-IP上创建和配置VLAN,可实现不同服务或用户...

    f5-azure-arm-templates模板:用于在Azure中快速部署BIG-IP服务的Azure资源管理器模板

    在描述中,我们看到模板的目标是快速部署BIG-IP服务,这意味着它们将包括配置所有必需的Azure资源,如虚拟机、网络接口、存储账户和负载均衡器,以便在几分钟内创建一个完整的BIG-IP环境。Azure资源管理器模板使用...

    PHP+JS+rsa数据加密传输

    解决方法一般只能采用专门的SSL硬件加速设备如F5的BIGIP等。 所以很多网站选择了模拟SSL的做法,使用RSA来对密码等安全信息进行公钥加密,服务端用私钥解密。 通常是对密码进行加密,本文也拿密码加密为例。 ...

    IDC容灾方案建议.doc.pdf

    根据文档描述,负载均衡需求分析主要关注以下几个方面: 1. **服务站点的负载均衡和异地容灾**:为了确保用户在任何时候都能访问到所需内容,系统必须能够自动监控并应对国际网络接入链路或单一IDC中的单点故障。当...

    大型网站架构大型网站架构

    大型动态应用系统平台通常由以下几个关键子系统组成: 1. **Web前端系统** - **目标**:实现服务器资源共享、避免单点故障、便于管理和统一配置。 - **策略**:不按应用划分服务器,而是将所有服务器进行统一调度...

    ltm@WA导入ucs后需要做的常规检查

    对于LTM@WA设备,导入UCS后的检查主要分为以下几个方面: 1. **软件版本确认**: 使用`b version –n`命令来检查设备当前运行的软件版本。这确保了设备上运行的是预期的软件,并且与导入的UCS匹配。 2. **高可用...

    大型互动网站架构概览

    在架构设计中,涉及以下几个关键方面: 1. **网络基础设施**:包括选择合适的网络设备,如交换机、路由器,以及考虑广域网负载均衡策略,如F5的3DNS、Array GSLB、Bind View等。网络架构要求高性能和高可用性,通常...

Global site tag (gtag.js) - Google Analytics