五大開源Web代理服務(wù)器的橫向點評
Web 代理軟件轉(zhuǎn)發(fā) HTTP 請求時并不會改變數(shù)據(jù)流量。它們可以配置成透明代理,而無需客戶端配置。它們還可以作為反向代理放在網(wǎng)站的前端;這樣緩存服務(wù)器可以為一臺或多臺 web 服務(wù)器提供無限量的用戶服務(wù)。
網(wǎng)站代理功能多樣,有著寬泛的用途:從緩存頁面、DNS 和其他查詢,到加速 web 服務(wù)器響應(yīng)、降低帶寬消耗。代理軟件廣泛用于大型高訪問量的網(wǎng)站,比如紐約時報、衛(wèi)報, 以及社交媒體網(wǎng)站如 Twitter、Facebook 和 Wikipedia。
頁面緩存已經(jīng)成為優(yōu)化單位時間內(nèi)所能吞吐的數(shù)據(jù)量的至關(guān)重要的機制。好的 Web 緩存還能降低延遲,盡可能快地響應(yīng)頁面,讓終端用戶不至于因等待內(nèi)容的時間過久而失去耐心。它們還能將頻繁訪問的內(nèi)容緩存起來以節(jié)省帶寬。如果你需要降低服務(wù)器負載并改善網(wǎng)站內(nèi)容響應(yīng)速度,那緩存軟件能帶來的好處就絕對值得探索一番。
為深入探查 Linux 下可用的相關(guān)軟件的質(zhì)量,我列出了下邊5個優(yōu)秀的開源 web 代理工具。它們中有些功能完備強大,也有幾個只需很低的資源就能運行。
1.Squid
Squid 是一個高性能、開源的代理緩存服務(wù)器和 Web 緩存進程,支持 FTP、Internet Gopher、HTTPS 和 SSL 等多種協(xié)議。它通過一個非阻塞的、I/O 事件驅(qū)動的單一進程處理所有的 IPV4 或 IPV6 協(xié)議請求。
Squid 由一個主服務(wù)程序 squid,和 DNS 查詢程序 dnsserver,另外還有一些可選的請求重寫、執(zhí)行認證程序組件,及一些管理和客戶端工具構(gòu)成。
Squid 提供了豐富的訪問控制、認證和日志環(huán)境, 用于開發(fā) web 代理和內(nèi)容服務(wù)網(wǎng)站應(yīng)用。
其特性包括:
◆Web 代理
◆通過緩存來降低訪問時間和帶寬使用
◆將元數(shù)據(jù)和訪問特別頻繁的對象緩存到內(nèi)存中
◆緩存 DNS 查詢
◆支持非阻塞的 DNS 查詢
◆實現(xiàn)了失敗請求的未果緩存
◆Squid 緩存可架設(shè)為層次結(jié)構(gòu),或網(wǎng)狀結(jié)構(gòu)以節(jié)省額外的帶寬
◆通過廣泛的訪問控制來執(zhí)行網(wǎng)站訪問策略
◆隱匿請求,如禁用或修改客戶端 HTTP 請求頭特定屬性
◆反向代理
◆媒體范圍media-range限制
支持 SSL
◆支持 IPv6
◆錯誤頁面的本地化 - Squid 可以根據(jù)訪問者的語言選項對每個請求展示本地化的錯誤頁面
◆連接固定Connection Pinning (用于 NTLM Auth Passthrough) - 一種允許 Web 服務(wù)器通過 Web 代理使用Microsoft NTLM 安全認證替代 HTTP 標準認證的方案
◆支持服務(wù)質(zhì)量 QoS, Quality of Service流
◆選擇一個 TOS/Diffserv 值來標記本地命中
◆選擇一個 TOS/Diffserv 值來標記對端命中
◆選擇性地僅標記同級或上級請求
◆允許任意發(fā)往客戶端的 HTTP 響應(yīng)保持由遠程服務(wù)器處響應(yīng)的 TOS 值
◆對收到的遠程服務(wù)器的 TOS 值,在復(fù)制之前對指定位進行掩碼操作,再發(fā)送到客戶端
◆SSL Bump (用于 HTTPS 過濾和適配) - Squid-in-the-middle,在 CONNECT 方式的 SSL 隧道中,用配置化的客戶端和服務(wù)器端證書,對流量進行解密和加密
◆支持適配模塊
◆ICAP 旁路和重試增強 - 通過完全的旁路和動態(tài)鏈式路由擴展 ICAP,來處理多多個適應(yīng)性服務(wù)。
◆支持 ICY 流式協(xié)議 - 俗稱 SHOUTcast 多媒體流
◆動態(tài) SSL 證書生成
支持 ICAP 協(xié)議 (Internet Content Adaptation Protocol)
◆完整的請求日志記錄
◆匿名連接
◆網(wǎng)站:www.squid-cache.org
◆開發(fā):美國國家應(yīng)用網(wǎng)絡(luò)研究實驗室(NLANR)和網(wǎng)絡(luò)志愿者
◆授權(quán):GNU GPL v2
◆版本號:4.0.1
2.Privoxy
Privoxy (Privacy Enhancing Proxy) 是一個非緩存類 Web 代理軟件,它自帶的高級過濾功能可以用來增強隱私保護、修改頁面內(nèi)容和 HTTP 頭部信息、訪問控制,以及去除廣告和其它招人反感的互聯(lián)網(wǎng)垃圾。Privoxy 的配置非常靈活,能充分定制已滿足各種各樣的需求和偏好。它支持單機和多用戶網(wǎng)絡(luò)兩種模式。
Privoxy 使用 action 規(guī)則來處理瀏覽器和遠程站點間的數(shù)據(jù)流。
其特性包括:
◆高度配置化——可以完全定制你的配置
◆廣告攔截
◆Cookie 管理
◆支持“Connection: keep-alive”??梢詿o視客戶端配置而保持外發(fā)的持久連接
◆支持 IPv6
◆標簽化Tagging,允許按照客戶端和服務(wù)器的請求頭進行處理
◆作為攔截intercepting代理器運行
◆巧妙的動作action和過濾機制用來處理服務(wù)器和客戶端的 HTTP 頭部
可以與其他代理軟件鏈式使用。
◆整合了基于瀏覽器的配置和控制工具,能在線跟蹤規(guī)則和過濾效果,可遠程開關(guān)
◆頁面過濾(文本替換、根據(jù)尺寸大小刪除廣告欄, 隱藏的“web-bugs”元素和 HTML 容錯等)
◆模塊化的配置使得標準配置和用戶配置可以存放于不同文件中,這樣安裝更新就不會覆蓋用戶的個性化設(shè)置
◆配置文件支持 Perl 兼容的正則表達式,以及更為精妙和靈活的配置語法
◆GIF 去動畫
◆旁路處理大量點擊跟蹤click-tracking腳本(避免腳本重定向)
◆大多數(shù)代理生成的頁面(例如 "訪問受限" 頁面)可由用戶自定義HTML模板
◆自動監(jiān)測配置文件的修改并重新讀取
◆大多數(shù)功能可以基于每個站點或每個 URL 位置來進行控制
◆網(wǎng)站: www.privoxy.org
◆開發(fā): Fabian Keil(開發(fā)領(lǐng)導(dǎo)者), David Schmidt, 和眾多其他貢獻者
◆授權(quán):GNU GPL v2
◆版本號: 3.4.2
3.Varnish Cache
Varnish Cache 是一個為性能和靈活性而生的 web 加速器。它新穎的架構(gòu)設(shè)計能帶來顯著的性能提升。根據(jù)你的架構(gòu),通常情況下它能加速響應(yīng)速度300-1000倍。Varnish 將頁面存儲到內(nèi)存,這樣 web 服務(wù)器就無需重復(fù)地創(chuàng)建相同的頁面,只需要在頁面發(fā)生變化后重新生成。頁面內(nèi)容直接從內(nèi)存中訪問,當然比其他方式更快。
此外 Varnish 能大大提升響應(yīng) web 頁面的速度,用在任何應(yīng)用服務(wù)器上都能使網(wǎng)站訪問速度大幅度地提升。
按經(jīng)驗,Varnish Cache 比較經(jīng)濟的配置是1-16GB內(nèi)存+ SSD 固態(tài)硬盤。
其特性包括:
◆新穎的設(shè)計
◆VCL - 非常靈活的配置語言。VCL 配置會轉(zhuǎn)換成 C,然后編譯、加載、運行,靈活且高效
◆能使用 round-robin 輪詢和隨機分發(fā)兩種方式來負載均衡,兩種方式下后端服務(wù)器都可以設(shè)置權(quán)重
◆基于 DNS、隨機、散列和客戶端 IP 的分發(fā)器Director
◆多臺后端主機間的負載均衡
◆支持 Edge Side Includes,包括拼裝壓縮后的 ESI 片段
◆重度多線程并發(fā)
◆URL 重寫
◆單 Varnish 能夠緩存多個虛擬主機
◆日志數(shù)據(jù)存儲在共享內(nèi)存中
◆基本的后端服務(wù)器健康檢查
◆優(yōu)雅地處理后端服務(wù)器“掛掉”
◆命令行界面的管理控制臺
◆使用內(nèi)聯(lián) C 語言來擴展 Varnish
◆可以與 Apache 用在相同的系統(tǒng)上
◆單個系統(tǒng)可運行多個 Varnish
◆支持 HAProxy 代理協(xié)議。該協(xié)議在每個收到的 TCP 請求——例如 SSL 終止過程中——附加一小段 http 頭信息,以記錄客戶端的真實地址
◆冷熱 VCL 狀態(tài)
◆可以用名為 VMOD 的 Varnish 模塊來提供插件擴展
◆通過 VMOD 定義后端主機
◆Gzip 壓縮及解壓
◆HTTP 流的通過和獲取
◆神圣模式和優(yōu)雅模式。用 Varnish 作為負載均衡器,神圣模式下可以將不穩(wěn)定的后端服務(wù)器在一段時間內(nèi)打入黑名單,阻止它們繼續(xù)提供流量服務(wù)。優(yōu)雅模式允許 Varnish 在獲取不到后端服務(wù)器狀態(tài)良好的響應(yīng)時,提供已過期版本的頁面或其它內(nèi)容。
◆實驗性支持持久化存儲,無需 LRU 緩存淘汰
網(wǎng)站: www.varnish-cache.org
開發(fā): Varnish Software
授權(quán): FreeBSD
版本號: 4.1.0
4.Polipo
Polipo 是一個開源的 HTTP 緩存代理,只需要非常低的資源開銷。
它監(jiān)聽來自瀏覽器的 web 頁面請求,轉(zhuǎn)發(fā)到 web 服務(wù)器,然后將服務(wù)器的響應(yīng)轉(zhuǎn)發(fā)到瀏覽器。在此過程中,它能優(yōu)化和整形網(wǎng)絡(luò)流量。從本質(zhì)來講 Polipo 與 WWWOFFLE 很相似,但其實現(xiàn)技術(shù)更接近于 Squid。
Polipo 最開始的目標是作為一個兼容 HTTP/1.1 的代理,理論它能在任何兼容 HTTP/1.1 或更早的 HTTP/1.0 的站點上運行。
其特性包括:
◆HTTP 1.1、IPv4 & IPv6、流量過濾和隱私保護增強
◆如確認遠程服務(wù)器支持的話,則無論收到的請求是管道處理過的還是在多個連接上同時收到的,都使用 HTTP/1.1 管道pipelining
◆下載被中斷時緩存起始部分,當需要續(xù)傳時用區(qū)間Range請求來完成下載
◆將 HTTP/1.0 的客戶端請求升級為 HTTP/1.1,然后按照客戶端支持的級別進行升級或降級后回復(fù)
◆全面支持 IPv6 (作用域(鏈路本地)地址除外)
◆作為 IPv4 和 IPv6 網(wǎng)絡(luò)的網(wǎng)橋
◆內(nèi)容過濾
◆能使用 Poor Man 多路復(fù)用技術(shù)Poor Man's Multiplexing降低延遲
◆支持 SOCKS 4 和 SOCKS 5 協(xié)議
◆HTTPS 代理
◆扮演透明代理的角色
◆可以與 Privoxy 或 tor 一起運行
網(wǎng)站:www.pps.univ-paris-diderot.fr/~jch/software/polipo/
◆開發(fā):Juliusz Chroboczek, Christopher Davis
◆授權(quán):MIT License
◆版本號:1.1.1
5.Tinyproxy
Tinyproxy 是一個輕量級的開源 web 代理守護進程,其設(shè)計目標是快而小。它適用于需要完整 HTTP 代理特性,但系統(tǒng)資源又不足以運行大型代理的場景,比如嵌入式部署。
Tinyproxy 對小規(guī)模網(wǎng)絡(luò)非常有用,這樣的場合下大型代理會使系統(tǒng)資源緊張,或有安全風險。Tinyproxy 的一個關(guān)鍵特性是其緩沖連接的理念。從效果上看, Tinyproxy 對服務(wù)器的響應(yīng)進行了高速緩沖,然后按照客戶端能夠處理的最高速度進行響應(yīng)。該特性極大的降低了網(wǎng)絡(luò)延滯帶來的問題。
特性:
◆易于修改
◆隱匿模式 - 定義哪些 HTTP 頭允許通過,哪些又會被攔截
◆支持 HTTPS - Tinyproxy 允許通過 CONNECT 方法轉(zhuǎn)發(fā) HTTPS 連接,任何情況下都不會修改數(shù)據(jù)流量
◆遠程監(jiān)控 - 遠程訪問代理統(tǒng)計數(shù)據(jù),讓你能清楚了解代理服務(wù)當前的忙碌狀態(tài)
◆平均負載監(jiān)控 - 通過配置,當服務(wù)器的負載接近一定值后拒絕新連接
◆訪問控制 - 通過配置,僅允許指定子網(wǎng)或 IP 地址的訪問
◆安全 - 運行無需額外權(quán)限,減小了系統(tǒng)受到威脅的概率
◆基于 URL 的過濾 - 允許基于域和URL的黑白名單
◆透明代理 - 配置為透明代理,這樣客戶端就無需任何配置
◆代理鏈 - 在流量出口處采用上游代理服務(wù)器,而不是直接轉(zhuǎn)發(fā)到目標服務(wù)器,創(chuàng)建我們所說的代理鏈
◆隱私特性 - 限制允許從瀏覽器收到的來自 HTTP 服務(wù)器的數(shù)據(jù)(例如 cookies),同時限制允許通過的從瀏覽器到 HTTP 服務(wù)器的數(shù)據(jù)(例如版本信息)
◆低開銷 - 使用 glibc 內(nèi)存開銷只有2MB,CPU 負載按并發(fā)連接數(shù)線性增長(取決于網(wǎng)絡(luò)連接速度)。 Tinyproxy 可以運行在老舊的機器上而無需擔心性能問題。
◆網(wǎng)站:banu.com/tinyproxy
◆開發(fā):Robert James Kaes和其他貢獻者
◆授權(quán):GNU GPL v2
◆版本號:1.8.3