Linux中國

五大開源 Web 代理伺服器橫評:Squid、Privoxy、Varnish、Polipo、Tinyproxy

為深入探查 Linux 下可用的相關軟體的質量,我列出了下邊5個優秀的開源 web 代理工具。它們中有些功能完備強大,也有幾個只需很低的資源就能運行。

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)
  • 完整的請求日誌記錄
  • 匿名連接

  • 網站: www.squid-cache.org
  • 開發: 美國國家應用網路研究實驗室(NLANR)和網路志願者
  • 授權: GNU GPL v2
  • 版本號: 4.0.1

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

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 緩存淘汰

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

Tinyproxy

Tinyproxy 是一個輕量級的開源 web 代理守護進程,其設計目標是快而小。它適用於需要完整 HTTP 代理特性,但系統資源又不足以運行大型代理的場景,比如嵌入式部署。

Tinyproxy 對小規模網路非常有用,這樣的場合下大型代理會使系統資源緊張,或有安全風險。Tinyproxy 的一個關鍵特性是其緩衝連接的理念。從效果上看, Tinyproxy 對伺服器的響應進行了高速緩衝,然後按照客戶端能夠處理的最高速度進行響應。該特性極大的降低了網路延滯帶來的問題。

特性:

  • 易於修改

  • 隱匿模式 - 定義哪些 HTTP 頭允許通過,哪些又會被攔截

  • 支持 HTTPS - Tinyproxy 允許通過 CONNECT 方法轉發 HTTPS 連接,任何情況下都不會修改數據流量

  • 遠程監控 - 遠程訪問代理統計數據,讓你能清楚了解代理服務當前的忙碌狀態

  • 平均負載監控 - 通過配置,當伺服器的負載接近一定值後拒絕新連接

  • 訪問控制 - 通過配置,僅允許指定子網或 IP 地址的訪問

  • 安全 - 運行無需額外許可權,減小了系統受到威脅的概率

  • 基於 URL 的過濾 - 允許基於域和URL的黑白名單

  • 透明代理 - 配置為透明代理,這樣客戶端就無需任何配置

  • 代理鏈 - 在流量出口處採用上游代理伺服器,而不是直接轉發到目標伺服器,創建我們所說的代理鏈

  • 隱私特性 - 限制允許從瀏覽器收到的來自 HTTP 伺服器的數據(例如 cookies),同時限制允許通過的從瀏覽器到 HTTP 伺服器的數據(例如版本信息)

  • 低開銷 - 使用 glibc 內存開銷只有2MB,CPU 負載按並發連接數線性增長(取決於網路連接速度)。 Tinyproxy 可以運行在老舊的機器上而無需擔心性能問題。

  • 網站: banu.com/tinyproxy

  • 開發: Robert James Kaes和其他貢獻者

  • 授權: GNU GPL v2

  • 版本號: 1.8.3

via: http://www.linuxlinks.com/article/20151101020309690/WebDelivery.html

譯者:fw8899 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國