当前所在位置: 首页 > 域名购买

最强内网穿透工具frpF5负载均衡器如何通过irules实现应用的灵活转发?

2021-10-12 本站作者 【 字体:

F5是非常强大的商业负载均衡器。除了处理性能强劲,以及高稳定性之外,F5还可以通过irules编写强大灵活的转发规则,实现web业务的灵活应用。

irules是基于TCL语法的,每个iRules必须包含事件、命令和逻辑三部分才可以有效运行。

F5负载均衡器如何通过irules实现应用的灵活转发?

irules基本格式

irules常用的逻辑运算符:contains 包含、equals(==) 等于、starts_with 以开始、ends_with 以结束,另外还支持正则表达式,需要复杂的匹配规则也可以使用正则表达式。

什么是frp

frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。frp 采用 C/S 模式,将服务端部署在具有公网 IP 机器上,客户端部署在内网或防火墙内的机器上,通过访问暴露在服务器上的端口,反向代理到处于内网的服务。 在此基础上,frp 支持 TCP, UDP, HTTP, HTTPS 等多种协议,提供了加密、压缩,身份认证,代理限速,负载均衡等众多能力。

以上为F5 irules的基本语法及常用的逻辑运算符,那么今天主要来介绍一下,如何通过编写irules来实现http应用的灵活转发。需要注意的是,要通过irules做http的转发处理,必须使用七层负载均衡模式,即F5的standard模式才可实现,四层负载均衡模式工作在传输层相当于是直通模式,是不能改变http转发请求的。

下图是frp官网:https://gofrp.org/

场景一:基于请求的域名转发

由于公网IP有限,通过F5七层负载均衡发布Web应用,可以实现公网IP的收敛,即一个公网IP可以对应多个业务的发布。具体为可以根据请求的域名来做转发。比如说请求者访问A域名,转发到后端A服务器。请求访问B域名,转发到后端B服务器。这个功能,叫做虚拟主机功能,是比较常用的。

例如,现在我有一个公网IP:10.1.1.1,我有两个WEB应用对应的域名为news.aaa.com及sports.aaa.com;后端服务器分别为pool_news及pool_sports。那么下面就介绍如何使用irules来实现虚拟主机的功能。

大家可以去看:傻瓜式-Web面板的轻量级、高性能内网穿透工具:nps使用教程

when HTTP_REQUEST { if { [HTTP::host] equals "news.aaa.com" } { pool pool_news } elseif { [HTTP::host] equals "sports.aaa.com" } { pool pool_sports } }

是不是非常简单,只需要根据tcl语言的格式,先做个事件声明为http request请求,再通过if else的条件判断语句,即可实现虚机主机功能,原理就是通过http头部的host字段来识别请求,根据不同的域名转发的不同的后端应用中。

场景二:基于请求的URL转发

除了通过二级域名发布不同的业务,然后通过七层虚拟主机的方式转发到对应后端的方式外,比较常用的就是同一个域名不同的URL来对应不同的应用。比如请求者访问的URL包含A目录,就转发到A服务器;请求访问的URL包含B目录,就转发到B服务器。

例如,我有一个网站,分别有读书跟电影两个频道,用户点击或访问不同的目录即进到不同频道的页面。读书 www.aaa.com/read、电影 www.aaa.com/movie。那么,通过irules可以这么实现。

最强内网穿透工具frp

GitHub地址:https://github.com/fatedier/frp,看下图就知道认可度有多高吧。

when HTTP_REQUEST { if { [HTTP::uri] starts_with"/read" } { pool pool_read } elseif { [HTTP::uri] starts_with "/movie" } { pool pool_movie } }

是不是也很简单呢。

场景三:动静分离

最强内网穿透工具frp安装frp

由于frp是go语言开发,因此可以直接下载可执行程序,没有任何依赖。一般通过GitHub的releases下载:https://github.com/fatedier/frp/releases,我一般用下图这两个版本。

在说动静分离之前,说明一下,irules的if else也是可以支持嵌套的方式编写的,这样就可以非常灵活的编写转发规则。那么下面就以结合动静分离的例子来演示下嵌套的方式如何编写。

动静分离的实现,通常是将请求的图片如jpg、png或视频等分发到专门的静态资源服务器如Nginx上,动态页面则分发到tomcat服务器上,从而提升网站的访问效率。下面就举例如何编写irules来实现动静分离。

最强内网穿透工具frp

Linux用通用解压命令:tar -xf frp_0.37.0_linux_amd64.tar.gz

when HTTP_REQUEST { if { [HTTP::host] equals "www.aaa.com" } { if { [HTTP::uri] contains ".js" or [HTTP::uri] contains ".css" or [HTTP::uri] contains ".jpg"} { pool pool_static_nginx } else { pool pool_aaa_srv } } elseif { [HTTP::host] equals "www.bbb.com" } { if { HTTP::uri] starts_with"/html"} { pool pool_static_nginx } else { pool pool_bbb_srv } } }

以上就是以嵌套的形式来编写动静分离的irules,可以看到对应aaa站点及bbb站点,静态资源服务器是共用的pool_static_nginx,而动态资源是转发到对应的后端服务器上。

总结

window直接用工具进行解压吧。最终得到frps、frpc这两个可执行程序,以及示例配置文件。

从以上的介绍及案例,可以看出,F5通过irules可以实现非常强大及灵活的七层转发策略,所举的例子只是irules应用的冰山一角,例子只是日常非常常用的策略,还可以做更多的事情。其实通过nginx或haproxy大部分场景也能够实现,大家可以参考进行配置。希望此次分享能对大家有所帮助!配置frps

按照如下配置frps.ini文件,在我的公网Linux服务器上执行frps -c frps.ini就可以成功运行。当然也可以使用systemd\frps.service将frps加入系统自启之类的,不过我还是喜欢用supervisor工具管理这些程序。

[common] # 与客户端建立连接端口 bind_port = 7000 # 与客户端校验的token token = my_token # 提供web界面端口 dashboard_port = 7500 # web界面登录用户名 dashboard_user = admin # web界面登录密码 dashboard_pwd = password配置frpc

按照如下配置在我的window电脑上的frpc.ini文件,值得注意的是remote_port实际是公网Linux服务器那边监听的端口,也就是说frpc通过server_port连接到frps上,通知frps启用remote_port来穿透到内网。运行客户端程序:frpc -c frpc.ini

[common] # 连接frps的IP地址 server_addr = 192.168.1.100 # 连接frps的端口 server_port = 7000 # 和frps服务端校验的token token = my_token # 这里取名随意,一般有意义就行 [stream] # 看官网有这些类型: TCP,UDP,HTTP,HTTPS,STCP,SUDP # 去这里开始看实例: https://gofrp.org/docs/examples/ssh/ type = tcp # 本地访问的IP地址 local_ip = 127.0.0.1 # 本地访问的端口 local_port = 8800 # 在frps服务器上对应的端口 remote_port = 6600访问frps的web服务

根据frps的dashboard_port端口访问web服务(http://192.168.1.100:7500/),可以看到如下的tcp里面有一条内网穿透的服务可以使用。可以看到左侧的tab页,可以支持好几种内网穿透的协议,不过我一般只用到tcp协议,例如访问内网ssh后台,用起来杠杠的。

最强内网穿透工具frp内网启动tcp服务

为了方便演示,编写了内网的http服务,在/test的方法里面,打印了远程地址,以及http的get请求的一个参数。

package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/test", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "RemoteAddr:%s\n", r.RemoteAddr) fmt.Fprintf(w, "data:%s\n", r.FormValue("data")) }) http.ListenAndServe("127.0.0.1:8800", nil) }测试结果

如下图所示当访问服务器的6600端口,实际穿透到访问内网127.0.0.1:8800的服务器。我配置的是tcp协议,因此只要内网的服务是基于tcp协议的,那么就可以对6600端口使用相应的工具去访问。官网示例是访问内网ssh服务:https://gofrp.org/docs/examples/ssh/。

最强内网穿透工具frp数据流向图

按照我的理解,画了一张数据流向图。按照数字进行先后顺序进行处理。

最强内网穿透工具frp总结

内网穿透在ipv6没有普及之前都是刚需啊,例如很多人都会用内网穿透将内网window的3389端口映射,然后就可以在远端使用window自带的mstsc进行远程桌面的访问。也可以将内网Linux服务器的ssh端口穿透到公网,就可以在远程访问内网的ssh后台了。爱了爱了frp牛逼。

阅读全文
id_1广告位-300*300
相关推荐

一文搞懂什么是vlan三层交换机、网关、DNS、子网掩码、MAC地址什么是vlan、三层交换机、网关、DNS、子网掩码、MAC地址

一文搞懂什么是vlan三层交换机、网关、DNS、子网掩码、MAC地址什么是vlan、三层交换机、网关、DNS、子网掩码、MAC地址
一、什么是VLANVLAN中文是“虚拟局域网”。LAN可以是由少数几台家用计算机...

阿里云服务器购买教程有吗,谁有阿里云服务器的购买教程阿里云域名备案需要哪些文件

阿里云服务器购买教程有吗,谁有阿里云服务器的购买教程阿里云域名备案需要哪些文件
如果备案主体为个人,则基本资料中的主体负责人证件、网站负责人证件及主办单位证件均...

最强内网穿透工具frpF5负载均衡器如何通过irules实现应用的灵活转发?

最强内网穿透工具frpF5负载均衡器如何通过irules实现应用的灵活转发?
F5是非常强大的商业负载均衡器。除了处理性能强劲,以及高稳定性之外,F5还可以通...

只做url转发的域名怎样备案?-“米发(MFPad)URL部署服务域名注册提供商”。 (转载)

只做url转发的域名怎样备案?-“米发(MFPad)URL部署服务域名注册提供商”。 (转载)
在百度搜索“米发”,第一条就是“米发(MFPad)URL部署服务提供商”。所谓U...

用自己的域名,解析指向到别人的网站,应该怎么设置?域名解析,我购买了一个域名,想指向京东,是否把域名解析成www.jd.com或者京东网站的IP即可?

用自己的域名,解析指向到别人的网站,应该怎么设置?域名解析,我购买了一个域名,想指向京东,是否把域名解析成www.jd.com或者京东网站的IP即可?
首先可以明确的告诉大家,即使我们将自己的域名解析至京东的节点IP或域名上,依旧是...

短网址:只有前世,没有今生新媒体运营人,有哪些必备工具呢?(推荐收藏)

短网址:只有前世,没有今生新媒体运营人,有哪些必备工具呢?(推荐收藏)
点上面的蓝字 航通社 订阅我们本文首发于百度百家原创文章,未经授权,请勿转载使用...

twitter推自动缩略网址服务 将使用t.co域名(转载)top域名选择和解析(转载)

twitter推自动缩略网址服务 将使用t.co域名(转载)top域名选择和解析(转载)
域名是站长建站过程中最基本元素,域名的基本知识站长们懂多少,是否能正确掌握帮助自...

2006医药代理商与域名转让Top新顶级域名改变站长业态

2006医药代理商与域名转让Top新顶级域名改变站长业态
我们从事医药信息整理工作,整理了数量巨大的全国各地医药代理商信息资料,为方便各地...

有什么软件统计过期域名聚名网域名过期域名查?聚名网域名过期能看到几天

有什么软件统计过期域名聚名网域名过期域名查?聚名网域名过期能看到几天
过期域名查询点击首页导航条“域名查询”,进入过期域名查询页面。过期域名查询功能可...

如何查询域名是否被停了如何查看一个域名的到期时间

如何查询域名是否被停了如何查看一个域名的到期时间
出现域名突然不能访问有很多原因<a href="http://w...