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这个地址的。

时间: 2024-08-08 01:54:46

haproxy学习之手机规则匹配的相关文章

c语言学习-求推荐有关C语言学习的手机app

问题描述 求推荐有关C语言学习的手机app 刚刚学习C语言,想要知道什么app可以帮助自己学习C语言.求推荐,谢谢! 解决方案 你是说 那种可以 输入代码 运行代码的 app是么 建议楼主 看书 网上可以搜到很多关于c语言的书籍 解决方案二: 看书,动手 练习.光看不练是没有用的~ 解决方案三: 不要用什么APP,想学就去看书.. 解决方案四: c语言更多用在底层,app属于应用层, 解决方案五: 微信公众号会替代手机APP吗?

HTC任伟光:学习小米手机优秀之处

11月7日消息,HTC中国区总裁任伟光在微访谈时表示,HTC未来将朝内容和服务方向发展,并表示在学习小米手机一些优秀之处.对于 网友提问"小米手机的掘起,会不会影响HTC的市场占有率",任伟光表示:"不能说影响,我们是在学习,学习它一些优秀的地方."当前,硬件公司 纷纷加强互联网服务,苹果打造生态链,摩托罗拉移动被谷歌收购,小米手机 提出做"软件.硬件.互联网服务"铁人三项.任伟光表示,未来HTC将向Content and Service(内容和

XML入门教程:掌握学习 XML 语法规则

xml|教程|入门教程|语法 XML的语法规则既很简单,又很严格.这些规则很容易学习,也很容易使用. 正因为如此,创建可读取及操作XML的软件不是一件难事. 一个XML文档的例子 XML使用一种可自我描述的简单的语法. <?xml version="1.0" encoding="ISO-8859-1"?><note><to>Tove</to><from>Jani</from><headin

阿里小蜜:语音识别、语义分析、深度学习在手机淘宝的实战分享

[编者按] 人工智能技术发展了近60年,道路起伏,成果丰硕.还记得2015年<谭铁牛院士:把握得当,人工智能是天使,魔鬼不会出现>的分析与展望.今年一场人机围棋大战,让人工智能彻底热了起来. 学术界,产业界,研究学者,篇篇精彩.业内都期待了解阿里的人工智能技术的实践.我们特别邀请阿里技术专家空无来深入分享下手机淘宝客户端是如何用语音识别.语义分析.深度学习等AI技术打造阿里小蜜客服系统的. 下为正文:   一场人机大战,让全世界所有对人工智能一知半解的人们变成了人类未来的担忧者.段子手. &q

学习Java正则表达式(匹配、替换、查找)_java

本文为大家分享了Java正则表达式的匹配.替换.查找和切割操作,有兴趣的朋友可以参考一下 import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; public class test { public static void main(String[] args) { getStrings(); //用正则表达式获取指定字符串内容中的指定内容 System.out.pri

JS 正则表达式(学习笔记2)匹配网址url参数

. 匹配除换行符的任意字符 \w 匹配字母,数字,下划线,汉字 \s 匹配任意空白符 \d 匹配数字 ^ 匹配字符开始位置 $ 匹配字符结束位置 * 重复零次或更多次 + 重复一次或更多次 ? 重复零次或一次 {n} 重复N次 {n,} 重复N次或更多次 {n,m} 重复N次或m次url参数匹配的问题 <script type="text/javascript"> var str="http://ladjkfldfjlfjlafjlfk/-1-1.html?sdl

手机淘宝推荐中的排序学习

周梁:淘宝推荐机器学习技术专家,中国科学院自动化研究所机器学习博士,主要研究工作方向是机器学习.大规模并行算法优化.先后从事过广告CTR预估,MPI机器学习平台搭建,手淘个性化推荐等多方面工作. 排序学习是推荐.搜索.广告的核心问题.在手机淘宝的推荐场景中,受制于展示空间的限制,排序学习显得尤为重要.在淘宝,如何从十亿的商品中,挑选出用户 今天喜欢的商品,也是个巨大的挑战. 本次我们分享排序学习在手机淘宝中的应用,其中包括:解决了哪些问题,遇到了哪些挑战,以及做了哪些改进.   手淘推荐介绍  

高负载均衡学习haproxy之关键词介绍

1.关键词balance balance用于定义负载均衡的算法,可用于defaults.listen和backend中. balance使用方法如下: balance <algorithm> [ <arguments> ] balance url_param <param> [check_post [<max_wait>]] <algorithm>用于在负载均衡场景中挑选一个server,其仅应用于持久信息不可用的条件下或需要将一个连接重新派发至

Nginx中 Rewrite规则的学习笔记

路由重写是Web服务器中的一个很重要的基本功能.通过路由重写,可以结构化URL,更具语义化(对SEO有益).另外,分享出去的URL可能会因程序路由变动而导致URL失效,而路由的重写可以很好的解决这类问题. 适当的使用Rewrite功能,可以更我们带来很多的好处.Nginx中Rewrite的功能是基于perl语言兼容的正则表达式,所以在编译安装nginx之前,需要安装PREC库.Nginx中Rewrite功能实现是基于ngx_http_rewrite_module,所以确保安装了此模块. Rewr