zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    你敢说自己了解单例模式?
    关于线程池,那些你还不知道的事
    Dubbo透传traceId/logid的一种思路
    当BeanUtils遇到泛型
    Oval框架如何校验枚举类型的一种思路
    HttpClient(4.5.x)正确的使用姿势
    HttpClient官方sample代码的深入分析(连接池)
    Jaxb如何优雅的处理CData
    JAXB性能优化
    Jaxb对xml报文头的小修小改
  • 原文地址:https://www.cnblogs.com/smail-bao/p/6739101.html
Copyright © 2011-2022 走看看