烂泥:haproxy学习之手机规则匹配
2019独角兽企业重金招聘Python工程师标准>>>
本文由ilanniweb提供友情赞助,首发于烂泥行天下
想要获得更多的文章,可以关注我的微信ilanniweb。
今天我们来介绍下有关haproxy匹配手机的一些规则配置。
一、业务需要
现在根据业务的实际需要,有以下几种不同的需求。如下:
1.1 转发所有手机请求
所有通过手机端访问http.ilanni.com域名的话,全部转发到http://www.ilanni.com这个地址,而PC端不受此限制。
1.2 根据url进行转发
如果手机端请求http.ilanni.com这个域名的url中,以docs或者manager这两个关键词开头的话,把该请求转发到后端的服务器,而PC端不受此限制。
也就是说手机端访问具体的url地址的话,可以正常访问。如果是直接访问http.ilanni.com域名的话,直接把该请求转发到http://www.ilanni.com这个地址。
二、haproxy配置
下面根据不同的业务需求进行配置haproxy,如下。
2.1 转发所有手机请求配置
要把所有的手机端请求转到www.ilanni.com这个地址,需要我们首先把访问的终端匹配出来,haproxy可以通过hdr_sub(user-agent)这个参数把手机端匹配出来。
手机端匹配出来后,我们就可以定义相应的规则,把手机端的请求转发到www.ilanni.com这个地址了。
haproxy具体配置文件如下:
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
maxconn 4096
uid 188
gid 188
daemon
tune.ssl.default-dh-param 2048
defaults
log global
mode http
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.1
option redispatch
retries 3
option redispatch
maxconn 2000
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
listen admin_stats
bind 0.0.0.0:1080
mode http
option httplog
maxconn 10
stats refresh 30s
stats uri /stats
stats auth admin:admin
stats hide-version
frontend weblb
bind *:80
acl is_http hdr_beg(host) http.ilanni.com
acl ua hdr_sub(user-agent) -i android iphone
redirect prefix http://www.ilanni.com if ua
use_backend httpserver if is_http
backend httpserver
balance source
server web1 127.0.0.1:8080 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3
在以上配置文件中,有以下两行需要注意:
acl ua hdr_sub(user-agent) -i android iphone
redirect prefix http://www.ilanni.com if ua
这两行,第一行是第一个ua规则,该规则是判断是否是手机端。
注意:在此手机端,我们只匹配了安卓手机和iphone。
第二行是跳转规则,如果匹配是手机端的话,那么直接跳转到http://www.ilanni.com这个地址。
如果是PC端的话,默认跳转到httpserver这个后端服务器组。
以上配置是一台服务器对外只提供一个域名访问的请求,如果有两个域名的话,就要进行如下配置:
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
maxconn 4096
uid 188
gid 188
daemon
tune.ssl.default-dh-param 2048
defaults
log global
mode http
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.1
option redispatch
retries 3
option redispatch
maxconn 2000
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
listen admin_stats
bind 0.0.0.0:1080
mode http
option httplog
maxconn 10
stats refresh 30s
stats uri /stats
stats auth admin:admin
stats hide-version
frontend weblb
bind *:80
acl is_http hdr_beg(host) http.ilanni.com
acl is_haproxy hdr_beg(host) haproxy.ilanni.com
acl ua hdr_sub(user-agent) -i android iphone
redirect prefix http://www.ilanni.com if ua !is_haproxy
use_backend haproxyserver if ua is_haproxy
use_backend haproxyserver if is_haproxy
use_backend httpserver if is_http
backend httpserver
balance source
server web1 127.0.0.1:8080 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3
backend haproxyserver
balance source
server web1 127.0.0.1:7070 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3
2.2 测试转发所有手机请求
现在我们来测试该跳转功能,如下:
通过测试你会发现,在手机浏览器中输入http.ilanni.com会自动跳转到http://www.ilanni.com这个地址。
2.3 根据url进行转发配置
根据手机端请求的url进行转发的话,首先也是需要匹配出手机端,然后定义url路径规则。最后结合手机端和url路径规则,进行跳转。
haproxy具体配置文件,如下:
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
maxconn 4096
uid 188
gid 188
daemon
tune.ssl.default-dh-param 2048
defaults
log global
mode http
option httplog
option dontlognull
option http-server-close
option forwardfor except 127.0.0.1
option redispatch
retries 3
option redispatch
maxconn 2000
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
maxconn 3000
listen admin_stats
bind 0.0.0.0:1080
mode http
option httplog
maxconn 10
stats refresh 30s
stats uri /stats
stats auth admin:admin
stats hide-version
frontend weblb
bind *:80
acl is_http hdr_beg(host) http.ilanni.com
acl is_docs url_beg /docs /manager
acl ua hdr_sub(user-agent) -i android iphone
redirect prefix http://www.ilanni.com if ua !is_docs
use_backend httpserver if ua is_docs
use_backend httpserver if is_http
backend httpserver
balance source
server web1 127.0.0.1:8080 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3
在上述配置文件中,需要以下几行解释下。
acl is_docs url_beg /docs /manager
定义一个is_docs规则。如果url以/docs或者/manager开头的,则全部属于该规则。
acl ua hdr_sub(user-agent) -i android iphone
redirect prefix http://www.ilanni.com if ua !is_docs
这两行首先是匹配出手机端,然后如果是手机端访问,并且访问的不是is_docs规则的话,则直接跳转到http://www.ilanni.com这个地址。
use_backend httpserver if ua is_docs
这条命令是,如果是手机端访问,并且访问的是is_docs规则的话,则直接跳转到httpserver这个后端服务器组。
如果是PC端的话,默认跳转到httpserver这个后端服务器组。
2.4 测试根据url进行转发
根据url转发配置完毕后,我们现在来测试。如下:
通过上图,我们可以看到手机端访问http://http.ilanni.com/docs/这个连接的话,是可以直接访问的。
三、其他haproxy配置
在前面我们讲解了有关手机的相关配置,在实际的生产环境中,有时候我们会碰到一些奇奇怪怪的要求。
要求所有手机端访问的http.ilanni.com,转到指定的页面。
haproxy主要配置文件如下:
frontend weblb
bind *:80
acl is_http hdr_beg(host) http.ilanni.com
acl ua hdr_sub(user-agent) -i android iphone
redirect prefix http://www.ilanni.com/?p=10624 if ua
use_backend httpserver if is_http
backend httpserver
balance source
server web1 127.0.0.1:8080 maxconn 1024 weight 3 check inter 2000 rise 2 fall 3
以上配置是所有手机端访问的,都跳转到http://www.ilanni.com/?p=10624这个页面。测试如下:
通过上图,我们可以看到手机端的访问确实跳转到了我们指定的页面。
类似这样的要求,一般会在升级公司相关业务时提出,对公司的公网IP可以正常,但是外部访问时,跳转到指定的维护页面。
这个我们可以根据源IP地址进行匹配,在此就不进行详细的讲解了。
通过上图,我们可以看到手机端访问http://http.ilanni.com/manager/status这个连接的话,是可以直接访问的。
通过上图,我们可以看到如果手机端访问的不是is_docs这个规则中定义的url话,则会全部跳转到http://www.ilanni.com这个地址的。
转载于:https://my.oschina.net/lanni654321/blog/527477
烂泥:haproxy学习之手机规则匹配相关推荐
- 【Nginx学习系列】location匹配规则
location 匹配规则 规则 匹配 = 严格匹配.如果请求匹配这个 location,那么将停止搜索并立即处理此请求 ~ 区分大小写匹配(可用正则表达式) ~* 不区分大小写匹配(可用正则表达式) ...
- 烂泥:学习tomcat之通过shell批量管理多个tomcat
2019独角兽企业重金招聘Python工程师标准>>> 本文由ilanniweb提供友情赞助,首发于烂泥行天下 想要获得更多的文章,可以关注我的微信ilanniweb 公司的业务是使 ...
- 【调研学习】手机中的震动马达
学习一下手机震动交互的基础元件-震动马达. 除了声音和屏幕外,手机最主要的交互方式就是震动-闹钟提示,游戏交互,点击提示. 皮肤中的Paciniant小体,对物体加速度非常敏感,震动器件就是产生加速度 ...
- 烂泥:学习Nagios(三): NRPE安装及配置
本文首发于烂泥行天下 在前两篇文章中,我们介绍了有关nagios的安装与配置,文章为<烂泥:学习Nagios(一):Nagios安装>.<烂泥:学习Nagios(二):Nagios配 ...
- OpenCV与图像处理学习十六——模板匹配
OpenCV与图像处理学习十六--模板匹配 一.模板匹配介绍 二.代码应用 一.模板匹配介绍 模板匹配是一种最原始.最基本的模式识别方法,研究某一特定目标的图像位于图像的什么地方,进而对图像进行定位. ...
- 正则表达式学习笔记001--点号匹配
正则表达式学习笔记001--点号匹配 以前写的课程都没有附上源码,很抱歉! 交流群1:251572072 交流群2:170933152 也可以自己下载: 正则表达式学习笔记001--点号匹配 http ...
- 烂泥:学习ssh之ssh密钥随身携带
本文首发于烂泥行天下 在上一篇文章<烂泥:学习ssh之ssh无密码登陆>中,我们讲解了如何使用ssh密钥,免密码登陆服务器. 这篇文章我们再来讲解,如何把已经生成的密钥随身携带. 有关如何 ...
- c语言入门自学免费app,C语言入门学习最新版下载-C语言入门学习app手机版v1.0.2 安卓版-腾飞网...
C语言入门学习app手机版是一款c语言编程自学软件,零基础也可以学习,里面有海量教学视频,针对c语言不同程度的讲解都囊括其中.随时随地学习编程都可以,不用担心自己没有基础.还支持在手机上敲代码编程哦. ...
- 元学习—关系网络和匹配网络
元学习-关系网络和匹配网络 1 关系网络(Relation Network) 1.1 关系网络的基本函数 一个关系网络至少需要包含两个核心的函数,第一个核心的函数是编码函数f,该函数经支持集(Supp ...
最新文章
- 如何导入某网站的certificate证书到SAP ABAP系统
- 基于UDP/TCP的网络协议(端口分配)
- MVC3快速搭建Web应用(二)
- 「雕爷学编程」Arduino动手做(18)---太阳能电池模块
- ECharts 定制 label 样式
- LIRe 源代码分析 4:建立索引(DocumentBuilder)[以颜色布局为例]
- MessageDialog MessageDialogPage
- CATransition 动画处理视图切换
- 【老生谈算法】matlab实现无标度网络算法源码——无标度网络
- 100行代码搞定Python做OCR识别身份证,文字各种字体!
- 算法是如何体现价值的
- 类与对象的基本语法+练习题
- ios 开发资源网 (from eagel)
- python随机生成一个数字_如何实现python随机生成数字?
- 云班课在计算机,云班课电脑版
- WIFI共享精灵 2013 电脑共享wifi
- 简单的Python五子棋
- Django之django-dynamic-preferences
- 海思Hi3519A VIDEO IO SAMPLE(Conflict MMZ踩坑)
- 基于微信小程序云开发的职业学校招生报名小程序源码,职业学校招生报名微信小程序源码 ,职业学校招生报名小程序源码
热门文章
- 通用权限管理模块系列——需求分析——列举需求
- Visual C#创建资源文件
- 巧用CSS的Border属性
- Windows上VS2017单步调试FFmpeg源码的方法
- 吴恩达老师深度学习视频课笔记:逻辑回归公式推导及C++实现
- Photoshop图像处理操作汇总
- linux lvm 大小与硬盘大小关系,linux lvm扩容磁盘大小
- 计算机应用 含升学方向,对口升学《计算机应用基础》复习资料总汇(含答案))讲述.doc...
- pythonapi是什么_python接口自动化(一)--什么是接口、接口优势、类型(详解)...
- SQL基础学习总结:2(表的创建、删除、更新和名称修改)