什么是反向代理? |
發(fā)布時間: 2012/5/15 18:27:26 |
通常的代理服務(wù)器,只用于代理內(nèi)部網(wǎng)絡(luò)對 Internet 的連接請求,客戶機必須指定代理服務(wù)器,并將本來要直接發(fā)送到 Web 服務(wù)器上的 http 請求發(fā)送到代理服務(wù)器中。由于外部網(wǎng)絡(luò)上的主機并不會配置并使用這個代理服務(wù)器,普通代理服務(wù)器也被設(shè)計為在 Internet 上搜尋多個不確定的服務(wù)器,而不是針對 Internet 上多個客戶機的請求訪問某一個固定的服務(wù)器,因此普通的 Web 代理服務(wù)器不支持外部對內(nèi)部網(wǎng)絡(luò)的訪問請求。當(dāng)一個代理服務(wù)器能夠代理外部網(wǎng)絡(luò)上的主機,訪問內(nèi)部網(wǎng)絡(luò)時,這種代理服務(wù)的方式稱為反向代理服務(wù)(也稱為逆向代理)。 通過反向代理服務(wù)器,可以記錄用戶所有的訪問行為,但這也會帶來系統(tǒng)資源相當(dāng)大的額外開銷。但對于不同的服務(wù)器來說,其保護(hù)的資源類型是有限的,我們只需要記錄、控制用戶對我們所關(guān)心的資源的訪問即可。比如對一個 mp3 服務(wù)提供商來說,只需要控制用戶對 .mp3 文件的請求次數(shù)即可。 從用戶訪問的角度來分,非法訪問主要有以下兩個方面:瞬間惡意多次請求和長時間持續(xù)攻擊。針對這兩種情況我們制定了以下控制策略: 1) 對抗瞬間惡意攻擊 這種情況是惡意的網(wǎng)上用戶使用多線程訪問同一資源,或者是在短時間內(nèi)訪問多個資源。對于第一種情況,可以定義一個參數(shù) m ,即同一用戶同時訪問的線程數(shù)量,若超過這個數(shù)量,則將他的請求暫緩發(fā)出或者廢除他的請求。為了對付第二種情況,訪問控制系統(tǒng)應(yīng)定義兩個參數(shù),一個是時間 t ,以秒為單位。第二個是資源個數(shù) g 。用這兩個參數(shù)確定一個規(guī)則 r ,即 r=F(g, t) 。 r 的含義就是最多允許網(wǎng)上用戶在 t 秒內(nèi)訪問 g 個資源。同時,規(guī)則 r 可以有多條,這樣為精確控制帶來方便。 2) 對抗長時間持續(xù)攻擊 用上面提到的規(guī)則 r=F(g, t) 也可以對抗長時間持續(xù)下載。這里再定義一種規(guī)則 k=F(t1,t2) 。 t1 、 t2 都是時間長度,以秒為單位。 t1 是最長持續(xù)時間。 t2 是判斷用戶是否連續(xù)訪問的間隔時間。例如可以規(guī)定網(wǎng)上用戶連續(xù)訪問一類資源 3 小時(參數(shù) t1 ),若有 8 小時(參數(shù) t2 )未訪問此類資源,則可認(rèn)為用戶是重新開始訪問。 將 t1 、 t2 定義的比較長并不能防止惡意用戶定時攻擊。比如他為了不違反上面的規(guī)則,就每隔 8 小時下載 3 個小時。對付這種情況,可以定義多條 k 規(guī)則,例如用戶每訪問 3 分鐘就必須休息 1 分鐘;每訪問 10 分鐘必須休息 3 分鐘等。 反向代理是訪問控制系統(tǒng)最核心的部分,其核心技術(shù)就是地址轉(zhuǎn)換。通過它可以保證使用者對客戶端計算機不進(jìn)行任何設(shè)置的情況下就使用訪問控制系統(tǒng)。從外觀看來,也就是從普通用戶看來,反向代理就像普通的 Web 服務(wù)器一樣。而反向代理所代理的每一個 Web 服務(wù)器都好像是反向代理服務(wù)器中的一個目錄。例如反向代理服務(wù)器本身的 URL 是 http://reverse-proxy ,它可以代理清華主頁服務(wù)器( http://www.tsinghua.edu.cn/index.html ),普通的用戶想通過反向代理服務(wù)器來訪問清華主頁服務(wù)器就只需要訪問 http://reverse-proxy/www.tsinghua.edu.cn/index.html 就行了。 反向代理的實現(xiàn) 在反向代理中,等于把反向代理服務(wù)器中的目錄映射到其它需要被代理的服務(wù)器上。這樣做只能解決用戶的一次訪問問題,不能做到讓用戶通過反向代理連續(xù)訪問。因為被代理的服務(wù)器上的信息是未知的,對于 HTTP 協(xié)議來講,很有可能出現(xiàn)絕對地址或者絕對鏈接,這樣的話,普通用戶的下一次訪問將會跳過反向代理而直接訪問真實的服務(wù)器。這是我們不希望看到的。因此,必須對服務(wù)器返回給用戶的信息進(jìn)行過濾,將所有的絕對 URL 更改成為通過反向代理的相對 URL 。為此,我們使用了正則表達(dá)式對所有的鏈接進(jìn)行檢測、替換。于是就實現(xiàn)了通過反向代理連續(xù)訪問的功能。 當(dāng)用戶的請求到達(dá)反向代理服務(wù)器之后,反向代理通過一定的規(guī)則將 URL 中的目錄信息解析成服務(wù)器以及端口的信息,從而進(jìn)行 socket 鏈接,即反向代理服務(wù)器模擬一個客戶端向真正的 Web 服務(wù)器發(fā)出 http 請求。當(dāng)?shù)玫交貞?yīng)信息的時候,通過 HTTP 頭中的 Content-Type 和文件的擴展名來判斷得到的信息的類別。若是非 HTML 信息(如 jpg, gif, zip 等),則將其原樣照發(fā)還給用戶,若是 HTML(html, htm, shtml 等),則用先用正則表達(dá)式建立字符串識別自動機,查找 html 文本中所有的鏈接信息。例如, <a href="......"> 、 <img src="......"> 等。然后判定鏈接的類型,對于在代理范圍之內(nèi)(代理范圍之外不予理會)的絕對 URL (以“ http:// ”打頭),則把它改寫成通過反向代理的格式。 例如 本文出自:億恩科技【prubsntakaful.com】 服務(wù)器租用/服務(wù)器托管中國五強!虛擬主機域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |