haproxy下同一域名分发请求

在实际项目中,项目接口可能是多语言开发完成,对外只绑定同一个域名,如。

不管后端采用哪种语言来开发接口,在前端(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

 

转载于:https://my.oschina.net/lockupme/blog/733375

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值