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