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 同一域名下分发请求的更多相关文章

  1. [转载] 浏览器Browser对同域名下的请求并发数量

    原文链接:https://blog.csdn.net/a562550212/article/details/79552713 另附原文作者贴的一个知乎地址,几个答主讲的非常好  https://www ...

  2. JMeter 将上一个请求的结果作为下一个请求的参数——使用正则提取器(转载)

    在接口测试和压力测试过程中,经常会将几个流程串联起来才能测试.如:我要进行获取用户信息接口测试,我就要先登录成功后,才能获取用户信息.所以,我就要首先要登录,获得我的登录凭证(tokenId或tick ...

  3. jmeter 如何将上一个请求的结果作为下一个请求的参数——使用正则提取器

    1.简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域. 它可以用于测试静态和动态资源例如 ...

  4. 细雨学习笔记:Jmeter上一个请求的结果作为下一个请求的参数--使用正则提取器

    Jmeter接口自动化--使用正则提取器,可以把上一个请求的结果取出来,作为下一个请求的入参

  5. Jmeter如何将上一个请求的结果作为下一个请求的参数——使用正则表达式提取器

    首先在线程组下添加两个HTTP请求, 添加好两个HTTP请求后,在每个HTTP请求下添加一个查看结果数 在第一个HTTP请求下添加正则表达式提取器 在第一个HTTP请求添加好IP地址,路径,端口号,协 ...

  6. JMeter 如何把上一个请求的结果作为下一个请求的参数 —— 使用正则提取器

    有这样一个压力测试环境,有一个上传页面,上传成功之后服务器会返回一些上传信息(比如文件的 id 或者保存路径之类的信息),然后压力机会继续下一个请求,比如调整 id 为 xx 的文件的一些信息等等.问 ...

  7. 几种将上一个请求的cookies带入下一个请求中的方法

    *** 此次练习不包含使用requests.session()方法实现: 练习环境:本地安装禅道 格式: 1.头部传Cookie:xxx2.加参数cookies=字典格式3.直接传RequestsCo ...

  8. jmeter之beanshell取出需要参数,传递给下个请求

    jmeter之beanshell取出需要参数,传递给下个请求 事件背景: 上周同事用jmeter录制脚本,录制成功回放后,并没有达到自己想要的结果. ps:他想从数据库取出某个字段值,然后对数据库做操 ...

  9. 【转】jmeter 如何将上一个请求的结果作为下一个请求的参数——使用正则提取器

    1.简介 Apache JMeter是Apache组织开发的基于Java的压力测试工具.用于对软件做压力测试,它最初被设计用于Web应用测试但后来扩展到其他测试领域. 它可以用于测试静态和动态资源例如 ...

随机推荐

  1. 不同版本的tomcat下载路径

    1.由于安全问题,有些tomcat存在漏洞.为了升级要么修复漏洞,要么就直接升级tomcat. 一般升级tomcat比较省事.但是找到相应版本的tomcat比较难,所以还是要自己寻找对应的tomcat ...

  2. 数组的翻转(非reverse())

    方法一: var arr = [1,2,3,4]; var arr2 = []; while(arr.length) { var num = arr.pop(); //删除数组最后一个元素并返回被删除 ...

  3. bat判断进程是否存在

    setlocal enabledelayedexpansion @echo offcd /d D:\work\tool\nginx-1.13.7 set hasit=nofor /F "to ...

  4. not available in automatic reference counting mode

    UncaughtExceptionHandler.m:156:47: 'autorelease' is unavailable: not available in automatic referenc ...

  5. 〖Android〗利用droidsshd在Android手机中开启 sshd,sftp,..

    源码下载地址: src: git clone https://code.google.com/p/droidsshd/ apk: http://droidsshd.googlecode.com/fil ...

  6. PRM路径规划算法

    路径规划作为机器人完成各种任务的基础,一直是研究的热点.研究人员提出了许多规划方法:如人工势场法.单元分解法.随机路标图(PRM)法.快速搜索树(RRT)法等.传统的人工势场.单元分解法需要对空间中的 ...

  7. SpringCloud之搭建配置中心

    一.搭建config-server 1.引入pom <dependencies> <dependency> <groupId>org.springframework ...

  8. 微软的在线文档存储OneDrive使用帮助

    onedrive默认空间5G,对于一般的文档存储够用的,很方便不限速!!! ###官方介绍 https://support.office.com/zh-cn/article/%E4%BA%86%E8% ...

  9. Easyui入门视频教程 第03集---Easyui布局

    Easyui入门视频教程 第03集---Easyui布局 目录 ----------------------- Easyui入门视频教程 第09集---登录完善 图标自定义   Easyui入门视频教 ...

  10. tableview中头部信息

    //创建tableview中头部的文件#define kPadding 10 #define kIconWidth 100 #define kIconHeight 100 #define kCount ...