haproxy 同一域名下分发请求
http://www.th7.cn/Program/java/201608/936162.shtml
https://my.oschina.net/lockupme/blog/733375
还有一点要注意的是,我们要把带path的use_backend放在不带path的前面
比如说这里
use_backend appapis_server_news if is_appapis is_appapis_news
use_backend appapis_server_albums if is_appapis is_appapis_albums
use_backend appapis_server if is_appapis
我们这里带接口路径的放在不带接口路径的前面。否则的话先读取不带path路径的use_backend,这样的话,就不会读取后面的path路径的use_backend
我在工作中就遇到过这个问题。调整一下前后顺序就好了
在实际项目中,项目接口可能是多语言开发完成,对外只绑定同一个域名,如。
不管后端采用哪种语言来开发接口,在前端(App或Wap或Pc),只要调用一个域名来请求接口。在这里采用Haproxy来做代理负载的
对于接口开的功能,一般按模板来开发,如用户模块可能采用Java、新闻模块可能采用Php、相册模块可能采用C#开发。
Haproxy的配置在这里不再详细说明,可在网上搜索。
看看Haproxy在实际中如何配置,同一个域名来实现的。
接口实例是这样:
java: api.domain.com/apis/users/具体接口名称
Php: api.domain.com/apis/news/具体接口名称
C#: api.domian.com/apis/albums/具体接口名称
acl is_appapis_news path_beg -i /apis/news #Php接口
acl is_appapis_albums path_beg -i /apis/albums #C#接口
acl is_appapis hdr_beg(host) -i api.domain.com #主Java接口 use_backend appapis_server_news if is_appapis is_appapis_news
use_backend appapis_server_albums if is_appapis is_appapis_albums
use_backend appapis_server if is_appapis
注意两点:
1、接口都是按模块来开发,所在配置中用path_beg,来区分,同时在使用use_backend代理的时候,if 后面要跟着主host代理“is_appapis”,
2、Haproxy,配置规则是按顺序来执行的,这点一定要注意
完整配置文件如下(适当删减,因为是真实环境,里面IP地址和域名都是假):
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 51200
chroot /usr/share/haproxy
uid 99
gid 99
daemon
nbproc 1
#debug
#quiet defaults
log global
mode http
option dontlognull
option redispatch
option abortonclose
timeout connect 5000ms
timeout client 30000ms
timeout server 30000ms listen admin_stats
bind 0.0.0.0:6421
option httplog
mode http
stats refresh 30s
stats uri /admin_stats
stats realm Load Balance
stats auth admin:9874523*&/ frontend web_in
mode http
maxconn 51200
bind :80 acl is_appapis_news path_beg -i /apis/news #Php接口
acl is_appapis_albums path_beg -i /apis/albums #C#接口
acl is_appapis hdr_beg(host) -i api.domain.com #主Java接口 acl is_waps hdr_beg(host) -i wap.domain.com use_backend appapis_server_news if is_appapis is_appapis_news
use_backend appapis_server_albums if is_appapis is_appapis_albums
use_backend appapis_server if is_appapis
use_backend waps_server if is_waps backend appapis_server
option httpclose
balance roundrobin
option forwardfor
stats uri /appapis
server s1 10.164.57.82:8080 check weight 1 minconn 1 maxconn 5120 check inter 40000
server s2 10.164.57.81:8080 check weight 1 minconn 1 maxconn 5120 check inter 40000 backend appapis_server_news
option httpclose
balance roundrobin
option forwardfor
stats uri /appapis
server s1 10.164.57.83:8000 check weight 1 minconn 1 maxconn 5120 check inter 40000 backend appapis_server_albums
option httpclose
balance roundrobin
option forwardfor
stats uri /appapis
server s1 10.164.57.84:8002 check weight 1 minconn 1 maxconn 5120 check inter 40000 backend waps_server
option httpclose
balance roundrobin
option forwardfor
stats uri /appapis
server s1 10.164.57.83:8001 check weight 1 minconn 1 maxconn 5120 check inter 40000 listen app_v1_userservices
bind :10001
mode tcp
balance roundrobin
server s1 10.164.57.82:10001 check weight 1 minconn 1 maxconn 5120 check inter 40000
server s2 10.164.57.81:10001 check weight 1 minconn 1 maxconn 5120 check inter 40000 listen app_v1_companyservices
bind :10002
mode tcp
balance roundrobin
server s1 10.164.57.82:10002 check weight 1 minconn 1 maxconn 5120 check inter 40000
server s2 10.164.57.81:10002 check weight 1 minconn 1 maxconn 5120 check inter 40000
haproxy 同一域名下分发请求的更多相关文章
- [转载] 浏览器Browser对同域名下的请求并发数量
原文链接:https://blog.csdn.net/a562550212/article/details/79552713 另附原文作者贴的一个知乎地址,几个答主讲的非常好 https://www ...
- JMeter 将上一个请求的结果作为下一个请求的参数——使用正则提取器(转载)
在接口测试和压力测试过程中,经常会将几个流程串联起来才能测试.如:我要进行获取用户信息接口测试,我就要先登录成功后,才能获取用户信息.所以,我就要首先要登录,获得我的登录凭证(tokenId或tick ...
- jmeter 如何将上一个请求的结果作为下一个请求的参数——使用正则提取器
1.简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域. 它可以用于测试静态和动态资源例如 ...
- 细雨学习笔记:Jmeter上一个请求的结果作为下一个请求的参数--使用正则提取器
Jmeter接口自动化--使用正则提取器,可以把上一个请求的结果取出来,作为下一个请求的入参
- Jmeter如何将上一个请求的结果作为下一个请求的参数——使用正则表达式提取器
首先在线程组下添加两个HTTP请求, 添加好两个HTTP请求后,在每个HTTP请求下添加一个查看结果数 在第一个HTTP请求下添加正则表达式提取器 在第一个HTTP请求添加好IP地址,路径,端口号,协 ...
- JMeter 如何把上一个请求的结果作为下一个请求的参数 —— 使用正则提取器
有这样一个压力测试环境,有一个上传页面,上传成功之后服务器会返回一些上传信息(比如文件的 id 或者保存路径之类的信息),然后压力机会继续下一个请求,比如调整 id 为 xx 的文件的一些信息等等.问 ...
- 几种将上一个请求的cookies带入下一个请求中的方法
*** 此次练习不包含使用requests.session()方法实现: 练习环境:本地安装禅道 格式: 1.头部传Cookie:xxx2.加参数cookies=字典格式3.直接传RequestsCo ...
- jmeter之beanshell取出需要参数,传递给下个请求
jmeter之beanshell取出需要参数,传递给下个请求 事件背景: 上周同事用jmeter录制脚本,录制成功回放后,并没有达到自己想要的结果. ps:他想从数据库取出某个字段值,然后对数据库做操 ...
- 【转】jmeter 如何将上一个请求的结果作为下一个请求的参数——使用正则提取器
1.简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域. 它可以用于测试静态和动态资源例如 ...
随机推荐
- 转 Unicode 和 UTF-8 的区别
原文链接: Unicode 和 UTF-8 有何区别? 原作者: 邱昊宇 简单来说: Unicode 是「字符集」 UTF-8 是「编码规则」 其中: 字符集:为每一个「字符」分配一个唯一的 ID(学 ...
- phonegap(cordova) 自己定义插件代码篇(五)----android ,iOS 集成微信登陆
统一登陆还是非常有必要的,安全,放心.代码 /*cordov 微信自己定义插件*/ (function (cordova) { var define = cordova.define; define( ...
- python 怎么模拟加header(如User-Agent、Content-Type等等)
# -*- coding: cp936 -*- #python 27 #xiaodeng #python 怎么模拟加header(如User-Agent.Content-Type等等) #办法一: i ...
- OpenCV学习代码记录——canny边缘检测
很久之前学习过一段时间的OpenCV,当时没有做什么笔记,但是代码都还在,这里把它贴出来做个记录. 代码放在码云上,地址在这里https://gitee.com/solym/OpenCVTest/tr ...
- Android 仿知乎创意广告
代码地址如下:http://www.demodashi.com/demo/14904.html 一.概述 貌似前段时间刷知乎看到的一种非常有特色的广告展现方式,即在列表页,某一个Item显示背后部分广 ...
- 跟我学Shiro---无状态 Web 应用集成
无状态 Web 应用集成 在一些环境中,可能需要把 Web 应用做成无状态的,即服务器端无状态,就是说服务器端不会存储像会话这种东西,而是每次请求时带上相应的用户名进行登录.如一些 REST 风格的 ...
- Notes of O_DIRECT flag
What is O_DIRECT Starting with kernel 2.4, Linux allows an application to bypass the buffer cache wh ...
- 给你出道题---N个数字的静态决策区分问题
决策,是世界上最重要的事情. 走路分两步:看准方向,大步前进.看准方向的过程就是决策. 任何一个问题,都对应两个空间:解空间和决策空间.我们所要做的就是使用决策空间去划分解空间. 决策可以分成两类:单 ...
- 单个APP页面支持屏幕旋转
1.info中支持所有的方向 2.APPDelega.h中添加属性 @property (nonatomic,assign) BOOL allowRotate; APPdelegate.m中实现方法 ...
- iphone 恢复出厂设置方法
1.下载安装并打开itunes. 2.让手机进入恢复模式: 一.先长按住电源键,出现关机选项时,请滑动关机: 二.随后再按电源键开机,屏幕会出现苹果标志,不要松开电源键: 三.接着再按住主屏 Home ...