五大开源 Web 代理软件横向比较：Squid、Privoxy、Varnish、Polipo、Tinyproxy
================================================================================
Web 代理软件转发 HTTP 请求时并不会改变数据流量。它们可以配置成透明代理，而无需客户端配置。它们还可以作为反向代理放在网站的前端；这样缓存服务器可以为一台或多台 web 服务器提供无限量的用户服务。

网站代理功能多样，有着宽泛的用途：从缓存页面、DNS 和其他查询，到加速 web 服务器响应、降低带宽消耗。代理软件广泛用于大型高访问量的网站，比如纽约时报、卫报， 以及社交媒体网站如 Twitter、Facebook 和 Wikipedia。

页面缓存已经成为优化单位时间内所能吞吐的数据量的至关重要的机制。好的 Web 缓存还能降低延迟，尽可能快地响应页面，让终端用户不至于因等待内容的时间过久而失去耐心。它们还能将频繁访问的内容缓存起来以节省带宽。如果你需要降低服务器负载并改善网站内容响应速度，那缓存软件能带来的好处就绝对值得探索一番。

为深入探查 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][1]
- 开发: 美国国家应用网络研究实验室(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][2]
- 开发: 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 缓存淘汰

--

- 网站: [www.varnish-cache.org][3]
- 开发: Varnish Software
- 授权: FreeBSD
- 版本号: 4.1.0

### 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/][4]
- 开发: 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][5]
- 开发: Robert James Kaes和其他贡献者
- 授权: GNU GPL v2
- 版本号: 1.8.3

--------------------------------------------------------------------------------

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

译者：[fw8899](https://github.com/fw8899)
校对：[wxy](https://github.com/wxy)

本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出

[1]:http://www.squid-cache.org/
[2]:http://www.privoxy.org/
[3]:https://www.varnish-cache.org/
[4]:http://www.pps.univ-paris-diderot.fr/%7Ejch/software/polipo/
[5]:https://banu.com/tinyproxy/
