添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
  • 如果浏览器所在环境不能访问外网,又要实现地图功能,而且服务器能上外网的话,那么就可以通过代理实现内网环境访问百度地图。

    值得注意的是此种代理方案并不能解决所有的百度地图的功能,但对于基本的地图功能还是基本能满足的

  • 通过代理实现有两种方案:一是手动下载百度js,并替换里面的域名为代理服务的地址,此种方式最简单,但不利于后期更新维护;二是通过nginx的过滤模块来修改js里面的域名为代理服务的地址,此种方式虽然省去了手动修改的弊病,但由于引入第三方模块,nginx需要重新编译,可靠性也得不到保障。

    查找相关资料知道nginx有http_sub_module模块可以修改服务器返回的内容,但只能修改一次, 不支持多次替换,而网上有第三方模块ngx_http_substitutions_filter_module则可以多次修改替换,遗憾的是ngx_http_substitutions_filter_module已经很久没更新了

  • 本文决定以第一种方式进行实现,第二种方式理论上更好,但实现较麻烦复杂,可以自行尝试。

第一种方式实现(3步)

获取js中的域名(1)

  • http://api.map.baidu.com/getscript 获得的域名如下:

    map.baidu.com
    sapi.map.baidu.com 
    api.map.baidu.com 
    its.map.baidu.com
    lbsyun.baidu.com
    loc.map.baidu.com
    webmap0.map.bdimg.com
    mapclick.map.baidu.com(ping不通)
    wuxian.baidu.com(ping不通)
    static.tieba.baidu.com
    or.map.bdimg.com
    j.map.baidu.com(ping不通)
    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
    ss0.baidu.com
    ss0.bdstatic.com
    d0.map.baidu.com
    d1.map.baidu.com
    d2.map.baidu.com
    d3.map.baidu.com
    gss0.bdstatic.com
    gsp0.baidu.com
    g0.api.map.baidu.com
    g1.api.map.baidu.com
    g2.api.map.baidu.com
    g3.api.map.baidu.com
    pcsv0.map.bdimg.com
    pcsv1.map.bdimg.com
    pcsv2.map.bdimg.com
    api0.map.bdimg.com
    api1.map.bdimg.com
    api2.map.bdimg.com
    
  • 以上ping不通的不能加到nginx配置里,否则类似错误:
    nginx: [emerg] host not found in upstream “j.map.bdimg.com” in /etc/nginx/conf.d/nginx-bdmap.conf:36

替换域名(2)

  • 将js中获取到的域名替换为代理服务,如在此处将api0.map.bdimg.com替换为[ip]:[port]/api0.map.bdimg.com,其中ip,port则为代理服务nginx的ip和端口,其他域名类推。

配置nginx(3)

  • 在nginx的nginx.conf中增加如下代理配置,修改后重新reload一下
    	server {
    			listen 8480;
    			server_name localhost;
    			location /api.map.baidu.com/ {
    	            proxy_pass http://api.map.baidu.com/;
    			location /sapi.map.baidu.com/ {
    	            proxy_pass http://sapi.map.baidu.com/;
    	        location /map.baidu.com/ {
    	            proxy_pass http://map.baidu.com/;
    			location /its.map.baidu.com/ {
    	            proxy_pass http://its.map.baidu.com/;
    			location /lbsyun.baidu.com/ {
    	            proxy_pass http://lbsyun.baidu.com/;
    			location /loc.map.baidu.com/ {
    	            proxy_pass http://loc.map.baidu.com/;
    			location /webmap0.map.bdimg.com/ {
    	            proxy_pass http://webmap0.map.bdimg.com/;
    			location /static.tieba.baidu.com/ {
    	            proxy_pass http://static.tieba.baidu.com/;
    			location /or.map.bdimg.com/ {
    	            proxy_pass http://or.map.bdimg.com/;
    			location /ss0.bdstatic.com/ {
    	            proxy_pass http://ss0.bdstatic.com/;
    	        location /ss0.baidu.com/ {
    	            proxy_pass http://ss0.baidu.com/;
    		    location /d0.map.baidu.com/ {
    	            proxy_pass http://d0.map.baidu.com/;       
    	        location /d1.map.baidu.com/ {
    	            proxy_pass http://d1.map.baidu.com/;         
    	        location /d2.map.baidu.com/ {
    	            proxy_pass http://d2.map.baidu.com/; 
    	        location /d3.map.baidu.com/ {
    	            proxy_pass http://d3.map.baidu.com/;        
    	        location /online0.map.bdimg.com/ {
    	            proxy_pass http://online0.map.bdimg.com/;
    	        location /online1.map.bdimg.com/ {
    	            proxy_pass http://online1.map.bdimg.com/;
    	        location /online2.map.bdimg.com/ {
    	            proxy_pass http://online2.map.bdimg.com/;
    	        location /online3.map.bdimg.com/ {
    	            proxy_pass http://online3.map.bdimg.com/;
    	        location /online4.map.bdimg.com/ {
    	            proxy_pass http://online4.map.bdimg.com/;
  • 经过以上三步后即可百度地图的代理