11 KiB
使用开源工具优化Web响应
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请求头特定属性
-
反向代理
-
媒体范围限制
-
支持SSL
-
支持IPv6
-
错误页面的本地化 - Squid可以根据访问者的语言选项对每个请求展示本地化的错误页面
-
连接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)
-
完整的请求日志记录
-
匿名连接
-
开发: 美国国家应用网络研究实验室和网络志愿者
-
授权: GNU GPL v2
-
版本号: 4.0.1
Privoxy
Privoxy(Privacy Enhancing Proxy)是一个非缓存类Web代理软件,它自带的高级过滤功能用来增强隐私保护,修改页面内容和HTTP头部信息,访问控制,以及去除广告和其它招人反感的互联网垃圾。Privoxy的配置非常灵活,能充分定制已满足各种各样的需求和偏好。它支持单机和多用户网络两种模式。
Privoxy使用Actions规则来处理浏览器和远程站点间的数据流。
其特性包括:
-
高度配置化
-
广告拦截
-
Cookie管理
-
支持"Connection: keep-alive"。可以无视客户端配置而保持持久连接
-
支持IPv6
-
标签化,允许按照客户端和服务器的请求头进行处理
-
作为拦截代理器运行
-
巧妙的手段和过滤机制用来处理服务器和客户端的HTTP头部
-
可以与其他代理软件链式使用
-
整合了基于浏览器的配置和控制工具,能在线跟踪规则和过滤效果,可远程开关
-
页面过滤(文本替换、根据尺寸大小删除广告栏, 隐藏的"web-bugs"元素和HTML容错等)
-
模块化的配置使得标准配合和用户配置可以存放于不同文件中,这样安装更新就不会覆盖用户的个性化设置
-
配置文件支持Perl兼容的正则表达式,以及更为精妙和灵活的配置语法
-
GIF去动画
-
旁路处理大量click-tracking脚本(避免脚本重定向)
-
大多数代理生成的页面(例如 "访问受限" 页面)可由用户自定义HTML模板
-
自动监测配置文件的修改并重新读取
-
最大特点是可以基于每个站点或每个位置来进行控制
-
网站: 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的分发器
-
多台后端主机间的负载均衡
-
支持Edge Side Includes,包括拼装压缩后的ESI片段
-
多线程并发
-
URL重写
-
单Varnish缓存多个虚拟主机
-
日志数据存储在共享内存中
-
基本的后端服务器健康检查
-
优雅地处理后端服务器“挂掉”
-
命令行界面的管理控制台
-
使用内联C来扩展Varnish
-
可以与Apache用在相同的系统上
-
单系统可运行多个Varnish
-
支持HAProxy代理协议。该协议在每个收到的TCP请求,例如SSL终止过程中,附加小段头信息,以记录客户端的真实地址
-
冷热VCL状态
-
用名为VMODs的Varnish模块来提供插件扩展
-
通过VMODs定义后端主机
-
Gzip压缩及解压
-
HTTP流通过和获取
-
神圣模式和优雅模式。用Varnish作为负载均衡器,神圣模式下可以将不稳定的后端服务器在一段时间内打入黑名单,阻止它们继续提供流量服务。优雅模式允许Varnish在获取不到后端服务器状态良好的响应时,提供已过期版本的页面或其它内容。
-
实验性支持持久化存储,无需LRU缓存淘汰
-
开发: 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管道
-
下载被中断时缓存起始部分,当需要续传时用区间请求来完成下载
-
将HTTP/1.0的客户端请求升级为HTTP/1.1,然后按照客户端支持的级别进行升级或降级后回复
-
全面支持IPv6 (作用域(链路本地)地址除外)
-
作为IPv4和IPv6网络的网桥
-
内容过滤
-
能使用Poor Man多路复用技术降低延迟
-
支持SOCKS 4和SOCKS 5协议
-
HTTPS代理
-
扮演透明代理的角色
-
可以与Privoxy或tor一起运行
-
开发: 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可以运行在老旧的机器上而无需担心性能问题。
-
开发: Robert James Kaes和其他贡献者
-
授权: GNU GPL v2
-
版本号: 1.8.3
via: http://www.linuxlinks.com/article/20151101020309690/WebDelivery.html