nginx正向代理訪問百度地圖API

weixin_34344677發表於2013-09-30

正向代理的概念

正向代理,也就是傳說中的代理,他的工作原理就像一個跳板,
簡單的說,
我是一個使用者,我訪問不了某網站,但是我能訪問一個代理伺服器
這個代理伺服器呢,他能訪問那個我不能訪問的網站
於是我先連上代理伺服器,告訴他我需要那個無法訪問網站的內容
代理伺服器去取回來,然後返回給我

從網站的角度,只在代理伺服器來取內容的時候有一次記錄
有時候並不知道是使用者的請求,也隱藏了使用者的資料,這取決於代理告不告訴網站

結 論就是 正向代理 是一個位於客戶端和原始伺服器(origin server)之間的伺服器,為了從原始伺服器取得內容,客戶端向代理髮送一個請求並指定目標(原始伺服器),然後代理向原始伺服器轉交請求並將獲得的內 容返回給客戶端。客戶端必須要進行一些特別的設定才能使用正向代理。

反向代理的概念

繼續舉例:
例使用者訪問 http://ooxx.me/readme
但ooxx.me上並不存在readme頁面
他是偷偷從另外一臺伺服器上取回來,然後作為自己的內容吐給使用者

但使用者並不知情
這很正常,使用者一般都很笨

這裡所提到的 ooxx.me 這個域名對應的伺服器就設定了反向代理功能

結 論就是 反向代理正好相反,對於客戶端而言它就像是原始伺服器,並且客戶端不需要進行任何特別的設定。客戶端向反向代理 的名稱空間(name-space)中的內容傳送普通請求,接著反向代理將判斷向何處(原始伺服器)轉交請求,並將獲得的內容返回給客戶端,就像這些內容 原本就是它自己的一樣。兩者區別

用途 上來講:

正 向代理的典型用途是為在防火牆內的區域網客戶端提供訪問Internet的途徑。正向代理還可以使用緩衝特性減少網路使用率。反向代理的典型用途是將 防火牆後面的伺服器提供給Internet使用者訪問。反向代理還可以為後端的多臺伺服器提供負載平衡,或為後端較慢的伺服器提供緩衝服務。

另外,反向代理還可以啟用高階URL策略和管理技術,從而使處於不同web伺服器系統的web頁面同時存在於同一個URL空間下。

安全性 來講:

正向代理允許客戶端通過它訪問任意網站並且隱藏客戶端自身,因此你必須採取安全措施以確保僅為經過授權的客戶端提供服務。

反向代理對外都是透明的,訪問者並不知道自己訪問的是一個代理。

獲取百度地圖API介面的頁面內容

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>獲取地區輪廓線</title>
<script type="text/javascript" src="http://api.map.baidu.com/api?v=1.3">
</script>
<style type="text/css">
body{font-size:13px;margin:10px}
#container{width:800px;height:500px;border:1px solid gray}
</style>
</head>
<body>
<div id="container"></div>
<br />
輸入省、直轄市或縣名稱:<input type="text" id="districtName" style="width:80px" value="重慶市">
<input type="button" onclick="getBoundary()" value="獲取輪廓線">
<br/>
<div id='txt'>
</div>
<script type="text/javascript">
var map = new BMap.Map("container");
map.centerAndZoom(new BMap.Point(116.403765, 39.914850), 5);
map.addControl(new BMap.NavigationControl({type: BMAP_NAVIGATION_CONTROL_SMALL}));
map.enableScrollWheelZoom();

function getBoundary(){       
    var bdary = new BMap.Boundary();
    var name = document.getElementById("districtName").value;
    bdary.get(name, function(rs){       //獲取行政區域
        map.clearOverlays();        //清除地圖覆蓋物       
        var count = rs.boundaries.length; //行政區域的點有多少個
        var str;
        for(var i = 0; i < count; i++){
            var ply = new BMap.Polygon(rs.boundaries[i], {strokeWeight: 2, strokeColor: "#ff0000"}); //建立多邊形覆蓋物
            map.addOverlay(ply);  //新增覆蓋物
            map.setViewport(ply.getPath());    //調整視野
            //document.getElementById('txt').innerHTML+='<p>'+rs.boundaries[i];    
            document.getElementById('txt').innerHTML=rs.boundaries[i];
        }  
        
    });   
}

</script>

</body>
</html>

相關文章