业务背景

场景一:

在政企用户中,服务器各域的调用层层严格,各个域中调用的防火墙规则把控复杂.一般分为DMZ(堡垒区),业务区,数据区.中间的层级调用一般规则为,要开什么端口,数据是单向还是双向.一般只允许DMZ访问外网,业务域不允许,但是开发公众号,或支付业务等要访问外网的时候,业务域没法访问,那就麻烦了.

场景二:

大并发项目中,负载架构肯定少不了负载,分布式.例如一个红包业务.各个层级的流量肯定很大,那这样的话,NG层的流量口要买很大的流量,比如买100M,业务层因为也要访问发红包接口或其它接口,也要买很大的流量.流量其实在云服务中,是一个很大的开支.那这样对于企业来说,其实是可以通过流量转移来解决这个问题.

解决办法

流量转移,乾坤大挪移哈哈

1. 接口调用伪装

程序端修改,如程序端需要访问:https://api.weixin.qq.com/获取用户信息接口

可以把接口修改成其它,如:http://mp.weixin.qq.com/获取用户信息接口

或者改成:http://myself.weixin.qq.com/获取用户信息接口

注意,此处为什么要用HTTP,因为HTTPS复杂啊.

2. DNS伪装

修改部署服务的服务器的hosts,伪装DNS

如:mp.weixin.qq.com 10.0.9.11(此为nginx服务器的地址)

那这样的话,再访问http://mp.weixin.qq.com是不是到nginx了,而不是到真正的接口地址了^V^.

==============操作

Vi /etc/hosts

3. Nginx的server配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
server {

listen 80;

server_name mysql.weixin.qq.com;

access_log logs/mywx.access.log main;

location / {

proxy_redirect off;

proxy_set_header Host \$host;

proxy_set_header X-Real-IP \$remote_addr;

proxy_set_header X-Forwarded-For \$proxy_add_x\_forwarded_for;

proxy_pass https://api.weixin.qq.com;

}

}

4. 测试

在9.59上访问:

已成功转向9.33并通过9.33访问正确的API地址,把接口结果返回