在实际项目中,项目接口可能是多语言开发完成,对外只绑定同一个域名,如。
不管后端采用哪种语言来开发接口,在前端(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