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