企业内网服务访问高德地图
最近需要部署一套分内外网的项目。各位大佬都知道,在内网环境中,我们是不能随便访问外网的,所以这个项目用到的高德地图web服务就歇菜了😖
由于项目时间紧凑,所以我们通过简单的方法实现内网服务访问外网的GIS服务
分析
项目中使用高德地图一般有两种方式,直接script脚本加载或者使用@amap/amap-jsapi-loader,两种方式都是通过访问 https://webapi.amap.com/maps
,来获取js api文件,所以我们将会通过这个文件追踪之后访问链接
通过浏览器F12 Network和Sources分析能得到它主要调用以下链接:
- webapi.amap.com && http://webapi.amap.com && https://webapi.amap.com
- restapi.amap.com
- a.amap.com
- vdata.amap.com
- vdata01.amap.com && vdata02.amap.com && vdata03.amap.com && vdata04.amap.com
- webst01.is.autonavi.com && webst02.is.autonavi.com && webst03.is.autonavi.com && webst04.is.autonavi.com
- wprd01.is.autonavi.com && wprd02.is.autonavi.com && wprd03.is.autonavi.com && wprd04.is.autonavi.com
Nginx配置
为了让我们获取到的js api通过代理去访问,我们需要用到Nginx的sub_filter模块,安装方法请看
先把上面提到的链接做个代理,能正常在浏览器访问证明代理成功
1 | location /webAmap/ { |
接下来使用sub_filter模块增加配置替换js文件内容
1 | location /maps { |
这里因为我的域名是使用https的,但是他有一个marker的icon文件使用http,所以我还需要加一个配置,把所有的http请求重写成https
1 | server { |
项目修改
- 脚本引入方式
1
<script type="text/javascript" src="https://代理地址/maps?v=2.0&key=您申请的key值"></script>
- vue中通过@amap/amap-jsapi-loader使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23hookSrcipt() {
const mapsUrl = 'https://webapi.amap.com/maps'
const webapiHttpsUrl = 'https://webapi.amap.com'
const restApiUrl = 'https://restapi.amap.com'
const property = Object.getOwnPropertyDescriptor(HTMLScriptElement.prototype, 'src')
const nativeSet = property.set
function customiseSrcSet(url) {
console.log('before', url)
if (url.toString().search(mapsUrl) !== -1) {
url = 'https://代理地址/maps' + url.split(mapsUrl)[1]
} else if (url.toString().search(webapiHttpsUrl) !== -1) {
url = 'https://代理地址/webAmap' + url.split(webapiHttpsUrl)[1]
} else if (url.toString().search(restApiUrl) !== -1) {
url = 'https://代理地址/restAmap' + url.split(restApiUrl)[1]
}
console.log('end', url)
nativeSet.call(this, url)
}
Object.defineProperty(HTMLScriptElement.prototype, 'src', {
set: customiseSrcSet
})
}
结语
到此代理完成,打开F12强刷一下可以看到请求地址已经改成代理地址,该笔记记录为高德js地图2.0版本代理方法,参考这篇文件1.4.15版本的代理方法
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 归尘の小酒馆!
评论