title: 22.业务域服务器通过dmz访问外网接口 CreateTime: 2019-07-11 00:00:22 UpdateTime: 2019-07-11 00:00:22 CategoryName: web --- --- title: "22.业务域服务器通过dmz访问外网接口" date: 2019-07-11T00:00:22+08:00 draft: false tags: ["web"] categories: ["web"] author: "hyy" --- ## 业务背景 ### 场景一: 在政企用户中,服务器各域的调用层层严格,各个域中调用的防火墙规则把控复杂.一般分为DMZ(堡垒区),业务区,数据区.中间的层级调用一般规则为,要开什么端口,数据是单向还是双向.一般只允许DMZ访问外网,业务域不允许,但是开发公众号,或支付业务等要访问外网的时候,业务域没法访问,那就麻烦了. ![](/public/22/document_image_rId9.png) ### 场景二: 大并发项目中,负载架构肯定少不了负载,分布式.例如一个红包业务.各个层级的流量肯定很大,那这样的话,NG层的流量口要买很大的流量,比如买100M,业务层因为也要访问发红包接口或其它接口,也要买很大的流量.流量其实在云服务中,是一个很大的开支.那这样对于企业来说,其实是可以通过流量转移来解决这个问题. ![](/public/22/document_image_rId10.png) ## 解决办法 流量转移,乾坤大挪移哈哈 ### 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 ![](/public/22/document_image_rId16.png) ### 3. Nginx的server配置 ``` 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上访问: ![](/public/22/document_image_rId17.png) 已成功转向9.33并通过9.33访问正确的API地址,把接口结果返回 ![](/public/22/document_image_rId18.png)