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