背景
在做ST的项目,用BMap,但是他们办公环境又都是内网,只能在一台DMZ区的电脑上反代,该电脑既能访问外网,又能同内网其他电脑通信。
解决
Step 1.JS更改
手动下载:http://api.map.baidu.com/getscript?v=2.0&ak=YOURKEY&services=&t=20180823194355
,保存成本地的bmap.js
文件,然后把里边的百度相关的dns全部挑出来,如下
//不全,我也不知道这些dns都是干嘛的,可能有漏掉的,但是不影响
api.map.baidu.com
api0.map.bdimg.com
api1.map.bdimg.com
api2.map.bdimg.com
shangetu0.map.bdimg.com
shangetu1.map.bdimg.com
shangetu2.map.bdimg.com
shangetu3.map.bdimg.com
shangetu4.map.bdimg.com
online0.map.bdimg.com
online1.map.bdimg.com
online2.map.bdimg.com
online3.map.bdimg.com
online4.map.bdimg.com
webmap0.map.bdimg.com
以api.map.baidu.com
为例将其替换成我的ip:3333/api.map.baidu.com
重复上述步骤,把所有DNS全部替换了,保存。
然后在网页里引用该bmap.js
文件
Step 2.反向代理到本机
使用反向代理软件,caddy, 在本机的3333反代上述域名
nginx也可以,但是我更喜欢caddy的配置语法
代码如下:
:3333/api.map.baidu.com/ {
proxy / api.map.baidu.com
}
:3333/api0.map.bdimg.com/ {
proxy / api0.map.bdimg.com
}
:3333/api1.map.bdimg.com/ {
proxy / api1.map.bdimg.com
}
:3333/api2.map.bdimg.com/ {
proxy / api2.map.bdimg.com
}
:3333/shangetu0.map.bdimg.com/ {
proxy / shangetu0.map.bdimg.com
}
:3333/shangetu1.map.bdimg.com/ {
proxy / shangetu1.map.bdimg.com
}
:3333/shangetu2.map.bdimg.com/ {
proxy / shangetu2.map.bdimg.com
}
:3333/shangetu3.map.bdimg.com/ {
proxy / shangetu3.map.bdimg.com
}
:3333/shangetu4.map.bdimg.com/ {
proxy / shangetu4.map.bdimg.com
}
:3333/online0.map.bdimg.com/ {
proxy / online0.map.bdimg.com
}
:3333/online1.map.bdimg.com/ {
proxy / online1.map.bdimg.com
}
:3333/online2.map.bdimg.com/ {
proxy / online2.map.bdimg.com
}
:3333/online3.map.bdimg.com/ {
proxy / online3.map.bdimg.com
}
:3333/online4.map.bdimg.com/ {
proxy / online4.map.bdimg.com
}
:3333/webmap0.map.bdimg.com/ {
proxy / webmap0.map.bdimg.com
}
然后打开防火墙3333
就应该可以了。
网友评论