项目需求:A服务器在内网,不能访问互联网,B服务器在外网,可以访问互联网,客户端电脑只能访问A服务器,客户端电脑怎么访问高德地图?

实现思路:客户端访问A服务器,A再访问B服务器,B请求高德地图api js并返回给A服务器,A服务器nginx安装ngx_http_sub_module模块,将api js中的所有域名替换成自己的代理地址再返回给客户端

注意事项:

1、下面配置只实现了基本的地图功能,如需实现更复杂的功能,还需代理如下地址

http://www.w3.orghttps://gaode.comhttp://m.amap.comhttp://vector.amap.comhttp://a.amap.com

2、http://vdata.amap.com/style_icon/icon-normal-small.png 、http://vdata.amap.com/style_icon/icon-biz-small.png 这两个图片集是在动态脚本中访问的,所以需要将eval(b)和eval(fd)中的脚本替换一下

3、如果客户端电脑可以直接访问B服务器的话,可以将两个配置文件合并,只在B服务器安装一个nginx即可

A服务器nginx配置:

server {
    listen       8080;
    server_name  localhost;
    location /maps  {
        proxy_set_header Accept-Encoding "";
        proxy_pass http://B服务器ip:8080/maps;
        sub_filter_types *;
        sub_filter_once off;
        sub_filter 'http://webapi.amap.com' 'http://B服务器ip:8080/webapi';
        sub_filter 'http://restapi.amap.com' 'http://B服务器ip:8080/restapi';
        sub_filter 'http://vdata.amap.com' 'http://B服务器ip:8080/vdata';

        sub_filter '/webapi.amap.com' '/B服务器ip:8080\/webapi';
        sub_filter '/restapi.amap.com' '/B服务器ip:8080\/restapi';
        sub_filter '/vdata.amap.com' '/B服务器ip:8080\/vdata';

        sub_filter 'webapi.amap.com' 'B服务器ip:8080/webapi';
        sub_filter 'restapi.amap.com' 'B服务器ip:8080/restapi';
        sub_filter 'vdata.amap.com' 'B服务器ip:8080/vdata';

        sub_filter 'wprd0{1,2,3,4}.is.autonavi.com' 'B服务器ip:8080/wprd0{1,2,3,4}';
	    
        sub_filter 'eval(b)' 'eval(b.replace(/vdata\.amap\.com/g,"B服务器ip:8080/vdata"))';
        sub_filter 'eval(fd)' 'eval(fd.replace(/vdata\.amap\.com/g,"B服务器ip:8080/vdata"))';
        }

    location / {
        proxy_pass http://172.16.10.180:8080;
    }
}

B服务器nginx配置:

server {
    listen       8080;
    server_name  localhost;

    location /maps {
        resolver 8.8.8.8;
        set $backend "webapi.amap.com";
        proxy_pass http://$backend;
    }

    location ~* ^/webapi(.*) {
        resolver 8.8.8.8;
        set $backend "webapi.amap.com";
	    proxy_pass http://$backend$1$is_args$args;
    }

    location ~* ^/restapi(.*) {
        resolver 8.8.8.8;
        set $backend "restapi.amap.com";
	    proxy_pass http://$backend$1$is_args$args;
    }

    location ~* ^/vdata(.*) {
        resolver 8.8.8.8;
        set $backend "vdata.amap.com";
	    proxy_pass http://$backend$1$is_args$args;
    }

    location ~* ^/wprd0(\d*)/(.*) {
        resolver 8.8.8.8;
        set $backend "is.autonavi.com";
	    proxy_pass http://wprd0$1.$backend/$2$is_args$args;
    }
}

 

Logo

华为云1024程序员节送福利,参与活动赢单人4000元礼包,更有热门技术干货免费学习

更多推荐