`

proxyServer squid / varnish / apache traffic server / ATS

阅读更多

apache traffic server

http://gwan.com/benchmark/index.html

http://zymlinux.net/  赵永明(阿里) /  旺旺群:754311920 / QQ_群:281057393

 

"High-Performance" is meaningless without Comparative Benchmarks

When, for the last time, have you seen a Web server's author publishing open-sourced comparative tests with 27 competitors?

  1. Apache (IBM)
  2. Apache Traffic Server (Yahoo!)
  3. IIS (Microsoft)
  4. GlassFish (Oracle)
  5. Tuxedo (Oracle)
  6. TntNet (Deutsche Boerse)
  7. Rock (Accoria)
  8. Tomcat (Apache Foundation)
  9. JBoss (Red Hat)
  10. Jetty
  11. Caucho Resin
  12. PlayFramework
  13. Lighttpd
  14. Nginx
  15. Varnish (the Web 'accelerator')
  16. OpenTraker
  17. Mongoose
  18. Cherokee
  19. Monkey
  20. Libevent
  21. Libev
  22. ULib
  23. Poco
  24. ACE
  25. Boost
  26. Snorkel
  27. AppWeb

Squid

http://news.yuanlin.com/detail/201317/134012.htm

已由 wdcdn (squid/3.1.12) 生成 Tue, 16 Apr 2013 01:02:31 GMT

 

基于有状态 Bloom filter 引擎的高速分组检测
叶明江+, 崔 勇, 徐 恪, 吴建平 20070112
(清华大学 计 算机科学与技术系,北京 100084)

下载

http://dl.iteye.com/topics/download/d69f508a-64cf-3eb4-a267-9a1d74ca50b9

http://www.jos.org.cn/ch/reader/download_pdf.aspx?file_no=20070112&year_id=2007&quarter_id=1&falg=1

Squid 使用了bloom filter算法 Bloom Filters.pdf 下载

http://dl.iteye.com/topics/download/5a4e033b-7490-36b5-9837-cb0c8512eceb

作者:兰花仙子   发表于:2009-06-23 15:15:31
原作者:Maciej Ceglowski
April 08, 2004 

http://www.chinaunix.net/jh/25/601028.html

例如,假如你运行了一个高流量的在线音乐存储站点,并且如果你已知歌曲存在,就可以通过仅获取歌曲信息的方法,来最大程度的减少数据库压力。你可以在启动时构建一个bloom filter,在试图执行昂贵的数据库查询前,可以用它执行快速的成员存在测试。

use Bloom::Filter;

my $filter = Bloom::Filter->new( error_rate => 0.01, capacity => $SONG_COUNT );
open my $fh, "enormous_list_of_titles.txt" or die "Failed to open: $!";

while (<$fh>) {
chomp;
$filter->add( $_ );
}

sub lookup_song {
my ( $title ) = @_;
return unless $filter->check( $title );
return expensive_db_query( $title ) or undef;
}

在该示例里,该测试给出假命中的几率是1%,在假命中率情况下程序会执行昂贵的数据库索取操作,并最终返回空结果。尽管如此,你已避开了99%的 昂贵查询时间,仅使用了用于hash查询的一小片内存。更进一步,1%假命中率的filter,每个key的存储空间在2字节以下。这比你执行完整的 hash查询所需的内存少得多。

 

 hitsubunnu 回复于:2009-06-23 15:15:31

这篇文章感觉比较久远了
如果可以使用memcache 用Cache::Memcached::Fast之类的 貌似 更好一些

https://gwbnsh.net.cn/extmail/cgi/index.cgi  Generated Sat, 31 Dec 2011 14:14:47 GMT by squid76-82 (squid)

squid76-80 (squid)  http://www.wabei.cn

Generated Fri, 18 Feb 2011 15:04:21 GMT by hz.nj.cache.house365.com (squid/3.0.STABLE20)  http://rent.house365.com

squid  http://it.sohu.com/20110109/n278764071.shtml  

lindows.iteye.com Generated Sat, 06 Mar 2010 03:02:37 GMT by cache.cdn.com (squid/2.7.STABLE7)

jx.xinhuanet.com Generated Sat, 06 Mar 2010 15:34:43 GMT by cache3.cdn.com (squid/2.7.STABLE7) 

Generated Mon, 11 Jan 2010 15:26:09 GMT by 219139240138.bbcool.cn (squid/3.0.RC1) 

502 bad geteway Apache/2.0.61 (Unix) DAV/2 Server at www.ynet.com Port 80 

Generated Wed, 18 Nov 2009 15:58:21 GMT by leafsquid.okglb.com (squid/2.6.STABLE21)

http://img.soufun.com/house/2004_04/05/1081161359709.jpg

Generated Sat, 12 Dec 2009 16:34:16 GMT by CNC-BJBY-53.145.fastcdn.com (squid)

Generated Mon, 31 Aug 2009 15:36:56 GMT by domain.com (squid)

(squid/2.7.STABLE6) http://www.qiannao.com/resources/list/0/7.page

Generated Wed, 01 Apr 2009 14:58:54 GMT by cache1.house365.com (squid/2.6.STABLE18) 

Generated Tue, 30 Dec 2008 16:40:50 GMT by cdn5817139162.bbcool.cn (squid/3.0.RC1) 

Generated Fri, 05 Dec 2008 12:26:52 GMT by static12.bjdx.cdn.xiaonei.com (squid/2.6.STABLE21) 
Generated Fri, 12 Oct 2007 10:59:20 GMT by qd.file.yoqoo.com (squid/2.5.STABLE13)
Generated Sat, 27 Sep 2008 14:48:05 GMT by donews.com squid217 (squid/2.5.STABLE14)
Generated Mon, 16 Mar 2009 09:03:43 GMT by gz.album.sina.com.cn (squid/2.6.STABLE21)
cache3.cdn.com (squid/2.7.STABLE7)

http://www.squid-cache.org/

http://blog.s135.com/book/squid/

周俭 Blog 简易 Proxy Server 架设

http://www.jianblog.com/2006/06/12/17/

代理服务器的功能可多的呢!在中大型的企业当中,可以藉由单点对外的 Proxy 主机来达到『节省频宽』的目的,同时,也可以透过这样的 Proxy 架构来达成『高阶防火墙』的设定,这里的『高阶』指的是 OSI 七层协议里面比较高阶段的层级,那就是应用与表现层方面的防火墙啦!那如果对于小型的企业呢?这个 Proxy 也可以达到分流的作用,让不同的目标网站可以透过不同的上层 Proxy 来取得数据!啊!真是很不错的一个服务器啊!不过,这个 Proxy 服务器也是几个常见的服务器里面,硬件要求相对比较高的一个咚咚!因为 Proxy 要求的是『快速』,所以呢,呵呵!当然硬件等级的要求是相当的『蛮像一回事』的!^_^

 

Squid缓冲服务,可能是代理服务器,或者搜索引擎的快照
Squid是一种用来缓冲Internet数据的软件。它是这样实现其功能的,接受来自人
们需要下载的目标(object)的请求并适当地处理这些请求。也就是说,如果一个人想
下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器(比如
:http://squid.nlanr.net/)并向这个页面发出请求。然后,Squid显式地聚集数据
到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地
从磁盘中读到它,那样数据迅即就会传输到客户机上。当前的Squid可以处理

HTTP,FTP,GOPHER,SSL和WAIS等协议。但它不能处理如POP,NNTP,RealAudio以及其它类型的
Squid可运行在大多数Unix和OS/2版本的系统之上,已知的可工作的有:
Windows,AIX,Digital Unix,FreeBSD,HP-UX,Irix,Linux,NetBSD,Nextstep,SCO,Solaris
东西。

 

 

一、什么是代理服务器?

代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。

在一般情况下,我们使用网络浏览器直接去连接其他Internet站点取得网络信息时,需送出Request信号来得到回答,然后对方再把信息以 bit方式传送回来。代理服务器是介于浏览器和Web服务器之间的一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出 请求, Request信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。而且,大部分代理服务器都具有缓冲的功能,就好象一个 大的Cache,它有很大的存储空间,它不断将新取得数据储存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么 它就不重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。

更重要的是:Proxy Server (代理服务器)是 Internet链路级网关所提供的一种重要的安全功能,它的工作主要在开放系统互联 (OSI) 模型的对话层。

二、代理服务器的分类

1、HTTP代理按匿名功能分类。

是否具有隐藏IP的功能。

非匿名代理:不具有匿名功能。

匿名代理。使用此种代理时,虽然被访问的网站不能知道你的IP地址,但仍然可以知道你在使用代理,有些侦测IP的网页也仍然可以查到你的IP。

高度匿名代理:使用此种代理时,被访问的网站不知道你的IP地址,也不知道你在使用代理进行访问。此种代理的隐藏IP地址的功能最强。

2、按请求信息的安全性分类

全匿名代理:不改变你的request fields(报文),使服务器端看来就像有个真正的客户浏览器在访问它。当然,你的真实IP是隐藏起来的。服务器的网管不会认为你使用了代理。

普通匿名代理:能隐藏你的真实IP,但会更改你的request fields,有可能会被认为使用了代理,但仅仅是可能,一般说来是没问题的。不过不要受它的名字的误导,其安全性可能比全匿名代理更高,有的代理会剥离 你的部分信息(就好比防火墙的stealth mode),使服务器端探测不到你的操作系统版本和浏览器版本。

elite代理:匿名隐藏性更高,可隐藏系统及浏览器资料信息等。此种代理安全性特强。

透明代理(简单代理):透明代理的意思是客户端根本不需要知道有代理服务器的存在,它改编你的request fields(报文),并会传送真实IP。注意,加密的透明代理则是属于匿名代理,意思是不用设置使用代理了,例如Garden 2程序。

3、按代理服务器的用途分类

1)Http代理:代理客户机的http访问,主要代理浏览器访问网页,它的端口一般为80、8080、3128等。

2)SSL代理:支持最高128位加密强度的http代理,可以作为访问加密网站的代理。加密网站是指以https://开始的网站。ssl的标准端口为443。

3)HTTP CONNECT代理:允许用户建立TCP连接到任何端口的代理服务器,这种代理不仅可用于HTTP,还包括FTP、IRC、RM流服务等。

4)FTP代理:代理客户机上的ftp软件访问ftp服务器,其端口一般为21、2121。

5)POP3代理:代理客户机上的邮件软件用pop3方式收邮件,其端口一般为110。

6)Telnet代理:能够代理通信机的telnet,用于远程控制,入侵时经常使用。其端口一般为23。

7)Socks代理:是全能代理,就像有很多跳线的转接板,它只是简单地将一端的系统连接到另外一端。支持多种协议,包括http、ftp请求及 其它类型的请求。它分socks 4 和socks 5两种类型,socks 4只支持TCP协议而socks 5支持TCP/UDP协议,还支持各种身份验证机制等协议。其标准端口为1080。

socks代理相应的采用socks协议的代理服务器就是SOCKS服务器,是一种通用的代理服务器。Socks是个电路级的底层网关,是 DavidKoblas在1990年开发的,此后就一直作为Internet RFC标准的开放标准。Socks不要求应用程序遵循特定的操作系统平台,Socks 代理与应用层代理、 HTTP 层代理不同,Socks代理只是简单地传递数据包,而不必关心是何种应用协议(比如FTP、HTTP和NNTP请求)。所以,Socks代理比其他应用层 代理要快得多。它通常绑定在代理服务器的1080端口上。如果您在企业网或校园网上,需要透过防火墙或通过代理服务器访问Internet就可能需要使用 SOCKS。一般情况下,对于拨号上网用户都不需要使用它。注意,浏览网页时常用的代理服务器通常是专门的http代理,它和SOCKS是不同的。因此, 您能浏览网页不等于您一定可以通过SOCKS访问Internet。常用的防火墙,或代理软件都支持SOCKS,但需要其管理员打开这一功能。如果您不确 信您是否需要SOCKS或是否有SOCKS可用,请与您的网络管理员联系。为了使用socks,您需要了解一下内容:

① SOCKS服务器的IP地址

② SOCKS服务所在的端口

③ 这个SOCKS服务是否需要用户认证?如果需要,您要向您的网络管理员申请一个用户和口令

知道了上述信息,您就可以把这些信息填入“网络配置”中,或者在第一次登记时填入,您就可以使用socks代理了。

在实际应用中SOCKS代理可以用作为:电子邮件、新闻组软件、网络传呼ICQ、网络聊天MIRC和使用代理服务器上联众打游戏等等各种游戏应用软件当中。

8)TUNNEL代理:经HTTPTunnet程序转换的数据包封装成http请求(Request)来穿透防火墙,允许利用HTTP服务器做任何TCP可以做的事情,功能相当于Socks5。

9)文献代理:可以用来查询数据库的代理,通过这些代理,可以获得互联网的相关科研学术的数据库资源,例如查询Sciencedirect网站(简称SD)、Academic Press、IEEE,SPRINGER等数据库。

10)教育网代理:指学术教育机构局域网通过特定的代理服务器可使无出国权限或无访问某IP段权限的计算机访问相关资源。

11)跳板代理:应用于跳板程序,可以看作一种具有动态加密的特殊socks5代理,,也可直接用于PSD软件。其端口一般为1813。

12)Ssso代理:代理客户机上的ssso程序访问远程网站,具有SSL加密强度的超级代理,支持socks。

13)Flat代理:代理客户机上的flatsurfer程序访问远程网站,具有高强度加密数据流的特殊代理,支持socks,最大可设置三次级联,可以设置穿越代理。其端口一般为6700。

14)SoftE代理:代理客户机上的SoftEther程序访问远程网站,应用虚拟集线器HUB和虚拟网卡技术,具备VPN功能及多种认证方式的代理,符合https协议。

三、代理服务器的主要功能

代理服务器一般来讲,对于普通的网民的作用有以下几个(撇开一些高深的用处不谈,因为未必会用到):

1、连接Internet与Intranet 充当firewall(防火墙):因为所有内部网的用户通过代理服务器访问外界时,只映射为一个IP地址,所以外界不能直接访问到内部网;同时可以设置 IP地址过滤,限制内部网对外部的访问权限;另外,两个没有互联的内部网,也可以通过第三方的代理服务器进行互联来交换信息。

2、节省IP开销:如前面所讲,所有用户对外只占用一个IP,所以不必租用过多的IP地址,降低网络的维护成本。这样,局域局内没有与外网相连的 众多机器就可以通过内网的一台代理服务器连接到外网,大大减少费用。当然也有它不利的一面,如许多网络黑客通过这种方法隐藏自己的真实IP地址,而逃过监 视。

3、通过它来加快我们浏览某些网站的速度:有时候我们访问一些国外或者港台网站,速度慢得像蜗牛一样,但只要你正确的选用代理服务器,速度就可以 得到提升,有时候这些速度的提升可是很明显的哦!本身带宽较小,通过带宽较大的proxy与目标主机连接。而且通常代理服务器都设置一个较大的硬盘缓冲区 (可能高达几个GB或更大),当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时,则直接由缓冲区中取出信息,传给用户,从 而达到提高访问速度的目的。

4、通过它,我们可以访问到一些平时不能去的网站:不信你可以马上打开你的浏览器和输入“www.geocities.com ” 这个网址。怎样?不用看着浏览器在这里空等了,并不是你的网络速度慢,也不是没有这个网站,而是你访问不到它(网络上还有很多这些类型的网站)。为什么访 问不到?这个问题嘛......说法有很多种,大部分都说是国内的网络被限制了访问,所以某些网站是不能去的。如果你在以往浏览过程中出现过以上的情况, 那么看来你有必要尝试一下使用代理服务器了。至于如何可以访问到这些网站? 请您继续阅读本系列文章!

参考文献:http://www.linkwan.com/gb/tech/sysinte/05091102.htm
参考资料:http://www.linkwan.com/gb/tech/sysinte/05091102.htm

Squid配置详解

 

http://wiki.ubuntu.org.cn/Squid%E9%85%8D%E7%BD%AE%E8%AF%A6%E8%A7%A3#.E5.8E.9F.E6.96.87.E8.AF.B4.E6.98.8E

出自Ubuntu中文

目录

[隐藏 ]

<script type="text/javascript"><!----></script>

原文说明

前言

  • 在此,我们要配置一个只对内部网络提供代理服务的Proxy Server。它具有如下功能
  • 它将用户分为高级用户和普通用户两种,对高级用户采用网卡物理地址识别的方法,普通用户则需要输入用户名和口令才能正常使用。
  • 高级用户没有 访问时间和文件类型的限制,而普通用户只在上班时可以访问以及一些其它的限制。

安装

从源中安装

源中自带稳定版本,执行下面的命令进行安装

sudo apt-get install squid squid-common

源码编译安装

当然你也可以到下面的官方网站下载最新的版本进行编译安装:

http://www.squid-cache.org/

其中STABLE稳定版、DEVEL版通常是提供给开发人员测试程序的,假定下载了最新 的稳定版squid-2.5.STABLE2.tar.gz,用以下命令解开压缩包:

tar xvfz squid-2.5.STABLE.tar.gz

用bz2方式压缩的包可能体积更小,相应的命令是:

tar xvfj squid-2.5.STABLE.tar.bz2 

然后,进入相应目录对源代码进行配置和编译,命令如下:

cd squid-2.5.STABLE2

配置命令configure有很多选项,如果不清楚可先用“-help”查看。通常情况下,用到的选项有以下几个:

--prefix=/web/squid

指定Squid的安装位置,如果只指定这一选项,那么该目录下会有bin、sbin、man、conf等目录,而主要的配置文件此时在conf子目录中。为便于管理,最好用参数--sysconfdir=/etc把这个文件位置配置为/etc。

--enable-storeio=ufs,null

使用的文件系统通常是默认的ufs,不过如果想要做一个不缓存任何文件的代理服 务器,就需要加上null文件系统。

--enable-arp-acl

这样可以在规则设置中直接通过客户端的MAC地址进行管理,防止客户使用IP欺骗。

--enable-err-languages="Simplify_Chinese"
--enable-default-err-languages="Simplify_Chinese"

上面两个选项告诉Squid编入并使用简体中文错误信息。

--enable-linux-netfilter

允许使用Linux的透明代理功能。

--enable-underscore

允许解析的URL中出现下划线,因为默认情况下Squid会认为带下划线的URL是 非法的,并拒绝访问该地址。 整个配置编译过程如下:

./configure --prefix=/var/squid 
--sysconfdir=/etc 
--enable-arp-acl 
--enable-linux-netfilter 
--enable-pthreads 
--enable-err-language="Simplify_Chinese" 
--enable-storeio=ufs,null 
--enable-default-err-language="Simplify_Chinese" 
--enable-auth="basic" 
--enable-baisc-auth-helpers="NCSA" 
--enable-underscore 

其中一些选项有特殊作用,将在下面介绍它们。 最后执行下面两条命令,将源代码编译为可执行文件,并拷贝到指定位置。

make
sudo make install

基本配置

安装完成后,接下来要对Squid的运行进行配置(不是前面安装时的配置)。所有项目都在squid.conf中完成。Squid自带的squid.conf包括非常详尽的说明,相当于一篇用户手册,对配置有任何疑问都可以参照解决。

在这个例子中,代理服务器同时也是网关,内部网络接口eth0的IP地址为192.168.0.1,外部网络接eth1的IP地址为202.103.x.x。下面是一个基本的代理所需要配置选项:

http_port 192.168.0.1:3128

默认端口是3128,当然也可以是任何其它端口,只要不与其它服务发生冲突即可。为了安全起见,在前面加上IP地址,Squid就不会监听外部的网络接口。 下面的配置选项是服务器管理者的电子邮件,当错误发生时,该地址会显示在错误页面上,便于用户联系:

cache_mgr start@soocol.com

以下这些参数告诉Squid缓存的文件系统、位置和缓存策略:

cache_dir ufs /var/squid 
cache_mem 32MB 
cache_swap_low 90 
cache_swap_high 95 

在这里,Squid会将/var/squid目录作为保存缓存数据的目录,每次处理的缓存大小是32兆字节,当缓存空间使用达到95%时,新的内容将 取代旧的而不直接添加到目录中,直到空间又下降到90%才停止这一活动。

如果不想Squid缓存任何文件,如某些存储空间有限的专有系统,可以使用 null文件系统(这样不需要那些缓存策略):

cache_dir null /tmp

下面的几个关于缓存的策略配置中,较主要的是第一行,即用户的访问记录,可以通过分析它来了解所有用户访问的详尽地址:

cache_access_log /var/squid/access.log 
cache_log /var/squid/cache.log 
cache_store_log /var/squid/store.log 

下面这行配置是在较新版本中出现的参数,告诉Squid在错误页面中显示的服务器名称:

visible_hostname No1.proxy

以下配置告诉Squid如何处理用户,对每个请求的IP地址作为单独地址处理:

client_netmask 255.255.255.255

如果是普通代理服务器,以上的配置已经足够。但是很多Squid都被用来做透明代理。

所谓透明代理,就是客户端不知道有代理服务器的存在,当然也不需要进行任何与代理有关的设置,从而大大方便了系统管理员。相关的选项有以下几个:

httpd_accel_host virtual 
httpd_accel_port 80 
httpd_accel_with_proxy on 
httpd_accel_user_host_header on 

在Linux上,可以用iptables/ipchains直接将对Web端口80的请求直接转发到Squid端口3128,由Squid接手,而用户浏览器仍然认为它访问的是对方的80端口。例如以下这条命令:

iptables -t nat -A PREROUTING -s 192.168.0.200/32 -p tcp --dport 80 -j REDIRECT 3128 

就是将192.168.0.200的所有针对80端口的访问重定向到3128端口。

所有设置完成后,关键且重要的任务是访问控制。Squid支持的管理方式很多,使用起来也非常简单(这也是有人宁愿使用不做任何缓存的Squid,也 不愿意单独使用iptables的原因)。

Squid可以通过IP地址、主机名、MAC地址、用户/密码认证等识别用户,也可以通过域名、域后缀、文件类 型、IP地址、端口、URL匹配等控制用户的访问,还可以使用时间区间对用户进行管理,所以访问控制是Squid配置中的重点。

Squid用ACL (Access Control List,访问控制列表)对访问类型进行划分,用http_access deny 或allow进行控制。根据需求首先定义两组用户advance和normal,还有代表所有未指明的用户组all及不允许上网的baduser,配置代 码如下:

acl advance 192.168.0.2-192.168.0.10/32 
acl normal src 192.168.0.11-192.168.0.200/32 
acl baduser src 192.168.0.100/32 
acl baddst dst www.soocol.com 
acl all src 0.0.0.0/0 

http_access deny baduser 
http_access allow advance 
http_access allow normal 

可以看出,ACL的基本格式如下: acl 列表名称 控制方式 控制目标 比如acl all src 0.0.0.0/0,其名称是all,控制方式是src源IP地址,控制目标是0.0.0.0/0的IP地址,即所有未定义的用户。出于安全考虑,总是在最后禁止这个列表。 下面这个列表代表高级用户,包括IP地址从192.168.0.2到192.168.0.10的所有计算机:

acl advance 192.168.0.2-192.168.0.20/32

下面这个baduser列表只包含一台计算机,其IP地址是192.168.0.100:

acl baduser 192.168.0.100/32 

ACL写完后,接下来要对它们分别进行管理,代码如下:

http_access deny baduser 
http_access allow advance 
http_access allow normal 

上面几行代码告诉Squid不允许baduser组访问Internet,但advance、normal组允许(此时还没有指定详细的权限)。由 于 Squid是按照顺序读取规则,会首先禁止baduser,然后允许normal。如果将两条规则顺序颠倒,由于baduser在normal范围中, Squid先允许了所有的normal,那么再禁止baduser就不会起作用。

特别要注意的是,Squid将使用allow-deny-allow-deny……这样的顺序套用规则。例如,当一个用户访问代理服务器时, Squid会顺序测试Squid中定义的所有规则列表,当所有规则都不匹配时,Squid会使用与最后一条相反的规则。

就像上面这个例子,假设有一个用户 的IP地址是192.168.0.201,他试图通过这台代理服务器访问Internet,会发生什么情况呢?我们会发现,他能够正常访问,因为 Squid找遍所有访问列表也没有和192.168.0.201有关的定义,便开始应用规则,而最后一条是deny,那么Squid默认的下一条处理规则 是allow,所以192.168.0.201反而能够访问Internet了,这显然不是我们希望的。所以在所有squid.conf中,最后一条规则 永远是http_access deny all,而all就是前面定义的“src 0.0.0.0”。

高级控制

前面说过,Squid的控制功能非常强大,只要理解Squid的行为方式,基本上就能够满足所有的控制要求。下面就一步一步来了解Squid是如何进行控制管理的。

通过IP地址来识别用户很不可靠,比IP地址更好的是网卡的MAC物理地址。要在Squid中使用MAC地址识别,必须在编译时加上“--enable-arp-acl”选项,然后可以通过以下的语句来识别用户:

acl advance arp 00:01:02:1f:2c:3e 00:01:02:3c:1a:8b ...

它直接使用用户的MAC地址,而MAC地址一般是不易修改的,即使有普通用户将自己的IP地址改为高级用户也无法通过,所以这种方式比IP地址可靠得多。

假如不想让用户访问某个网站应该怎么做呢?可以分为两种情况:一种是不允许访问某个站点的某个主机,比如ok的主机是ok.sina.com.cn,而其它的新浪资源却是允许访问的,那么ACL可以这样写:

acl sinapage dstdomain ok.sina.com.cn 
... ... 
http_access deny ok 
... ... 

由此可以看到,除了ok,其它如http://www.sina.com.cn、news.sina.c...��常访问。

另一种情况是整个网站都不许访问,那么只需要写出这个网站共有的域名即可,配置如下:

acl qq dstdomain .tcccent.com.cn

注意tcccent前面的“.”,正是它指出以此域名结尾的所有主机都不可访问,否则就只有tcccent.com.cn这一台主机不能访问。

如果想禁止对某个IP地址的访问,如202.118.2.182,可以用dst来控制,代码如下:

acl badaddr dst 202.118.2.182

当然,这个dst也可以是域名,由Squid查询DNS服务器将其转换为IP。

还有一种比较广泛的控制是文件类型。如果不希望普通用户通过代理服务器下载MP3、AVI等文件,完全可以对他们进行限制,代码如下:

acl mmxfile urlpath_regex \.mp3$ \.avi$ \.exe$ 
http_access deny mmxfile 

看到regex,很多读者应该心领神会,因为这条语句使用了标准的规则表达式(又叫正则表达式)。它将匹配所有以.mp3、.avi等结尾的URL请求,还可以用-i参数忽略大小写,例如以下代码:

acl mmxfile urlpath_regex -i \.mp3$

这样,无论是.mp3还是.MP3都会被拒绝。当然,-i参数适用于任何可能需要区分大小写的地方,如前面的域名控制。

如果想让普通用户只在上班时间可以上网,而且是每周的工作日,用Squid应当如何处理呢?看看下面的ACL定义:

acl worktime time MTWHF 8:30-12:00 14:00-18:00 
http_access deny !worktime 

首先定义允许上网的时间是每周工作日(星期一至星期五)的上午和下午的固定时段,然后用http_access 定义所有不在这个时间段内的请求都是不允许的。

或者为了保证高级用户的带宽,希望每个用户的并发连接不能太多,以免影响他人,也可以通过Squid控制,代码如下:

acl conncount maxconn 3 
http_access deny conncount normal 
http_access allow normal

这样,普通用户在某个固定时刻只能同时发起三个连接,从第四个开始,连接将被拒绝。

总之,Squid的ACL配置非常灵活、强大,更多的控制方式可以参考squid.conf.default。

认证

用户/密码认证为Squid管理提供了更多便利,最常用的认证方式是NCSA。从Squid 2.5版本开始,NCSA认证包含在了basic中,而非以前单独的认证模块。下面来看看实现认证的具体操作。

首先在编译时配置选项应包括以下配置:

--enable-auth="basic" --enable-basic-auth-helpers="NCSA" 

“make install”以后,需要将“helpers/basic_auth/NCSA/ncsa_auth”拷贝到用户可执行目录中,如/usr/bin(如 果在该目录中找不到这个执行文件,在编译时请使用make all而不是make,或者直接在该目录中执行make),然后需要借助Apache的密码管理程序htpasswd来生成用户名/密码对应的文件,就像 下面这行代码:

htpasswd -c /var/squid/etc/password guest

在输入两遍guest用户的密码后,一个guest用户就生成了。如果以后需要添加用户,把上面的命令去掉-c参数再运行即可。

Squid 2.5在认证处理上有了较大的改变,这里就只讨论2.5版本的处理方法,2.4及以下版本请参考squid.conf.default。在2.5版的squid.conf中,包括以下几个相关选项:

该选项指出了认证方式(basic)、需要的程序(ncsa_auth)和对应的密码文件(password)

auth_param basic program /usr/bin/ncsa_auth /var/squid/etc/password 

指定认证程序的进程数

auth_param basic children 5

浏览器显示输入用户/密码对话框时的领域内容

auth_param basic realm My Proxy Caching Domain

基本的认证有效时间

auth_param basic credentialsttl 2 hours

普通用户需要通过认证才能访问Internet

acl normal proxy_auth REQUIRED 
http_access allow normal

通过以上的配置即可完成认证工作。有的读者可能要问:认证只针对普通用户,而高级用户是直接上网的,该怎么处理呢?其实,这两种用户是可以共存的。

如 前所述,Squid是顺序处理http_access的,所以在http_access处理过程中,如果先处理normal用户,那么当前用户无论是否属 于高级用户,都会被要求进行认证;相反如果先处理高级用户,剩下的就只有需要认证的普通用户了。例如以下配置代码:

... 
http_access allow normal (需要认证) 
http_access allow advance (不需要认证) 
... 

不管是否为noauth用户,都要求进行用户名/密码验证。正确的方法是将二者位置交换,代码如下:

... 
http_access allow advance 
http_access allow normal 
... 

这时,高级用户不会受到任何影响。

总结

下面把整个squid.conf总结一下:

服务器配置

http_port 192.168.0.1:3128 
cache_mgr start@soocol.com 
cache_dir null /tmp 
cache_access_log /var/squid/access.log 
cache_log /var/squid/cache.log 
cache_store_log /var/squid/store.log 
visible_hostname No1.proxy 
client_mask 255.255.255.255 
httpd_accel_host virtual 
httpd_accel_port 80 
httpd_accel_with_proxy on 
httpd_accel_user_host_header on

用户分类

acl advance arp 00:01:02:1f:2c:3e 00:01:02:3c:1a:8b ... 
acl normal proxy_auth REQUIED 
acl all src 0.0.0.0

行为分类

acl mmxfile urlpath_regex \.mp3$ \.avi$ \.exe$ 
acl conncount maxconn 3 
acl worktime time MTWHF 8:30-12:00 14:00-18:00 
acl sinapage dstdomain ok.sina.com.cn 
acl qq dstdomain .tcccent.com.cn

处理

http_access allow advance 
http_access deny conncount normal 
http_access deny !worktime 
http_access deny mmxfile 
http_access deny sinapage 
http_access deny qq 
http_access allow normal

配置后的状况是,advance组可以不受任何限制地访问Internet,而normal组则只能在工作时间上网,而且不能下载多媒体文件,不能访问某些特定的站点,而且发送请求不能超过3个。

通过本文的介绍,它可以了解Squid的基本能力。当然,它的能力远不止此,可以建立强大的代理服务器阵列,可以帮助本地的Web服务器提高性能,可以提高本地网络的安全性等。要想发挥它的功效,还需要进一步控制。

 

Varnish Cache 3.0.2

 

heartbeat+varnish搭建demo

http://i-david.iteye.com/blog/1310010

 

https://www.varnish-cache.org/releases/varnish-cache-3.0.2

http://repo.varnish-cache.org/source/varnish-3.0.2.tar.gz

Installation on FreeBSD

cd /usr/ports/www/varnish && make install clean 

To install the binary packages, run: 

pkg_add -r varnish

Installation on RedHat

To use the varnish-cache.org repository, run     

rpm --nosignature -i http://repo.varnish-cache.org/redhat/varnish-3.0/el5/noarch/varnish-release-3.0-1.noarch.rpm 

and then run      yum install varnish  The --no-signature is only needed on initial installation, since

the Varnish GPG key is not yet in the yum keyring

 

 

http://longrujun.name/index.php/2008/11/08/scaling-apps-with-varnish/

 

Scaling Apps with Varnish

http://www.varnish-cache.org/

 

http://news.ifeng.com/photo/society/200804/0422_1400_502301.shtml Guru Meditation: XID: 950178285 varnish

 

 

clip_image002

Varnish 是一款高性能的反向代理和HTTP加速器,并非传说中Http Cache Server。这是Varnish作者的 Varnish http accelerator 文档,少不了PK Squid

 


1、Varnish 官方网站: http://varnish.projects.linpro.no/

2、常见FAQ参考http://varnish.projects.linpro.no/wiki/FAQ

Varnish Cache网站加速器

http://blog.chinaunix.net/u/24940/showart_1018358.html

Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang (vg.no) 使用3台Varnish代替了原来的12台squid,性能比以前更好。

   Varnish的作者Poul-Henning Kamp是FreeBSD的内核开发者之一,他认为现在的计算机比起1975年已经复杂许多。在1975年时,储存媒介只有两种:内存与硬盘。但现在计算 机系统的内存除了主存外,还包括了cpu内的L1、L2,甚至有L3快取。硬盘上也有自己的快取装置,因此squid cache自行处理物件替换的架构不可能得知这些情况而做到最佳化,但操作系统可以得知这些情况,所以这部份的工作应该交给操作系统处理,这就是 Varnish cache设计架构。

  Varnish可以在FreeBSD 6.0和Linux 2.6内核上运行。

  1、编译安装varnish HTTP加速器:

引用
wget http://blog.s135.com/soft/linux/varnish/varnish-1.1.1.tar.gz
tar zxvf varnish-1.1.1.tar.gz
cd varnish-1.1.1
./configure --prefix=/usr/local/varnish
make && make install


  2、简单启动varnish守护进程,用本机80端口去反向代理加速127.0.0.1:81上的Apache服务器:

引用
/usr/local/varnish/sbin/varnishd -a :8080 -b 127.0.0.1:81 -p thread_pool_max=1500 -p thread_pools=5 -p listen_depth=512 -p client_http11=on -w 1,10000,120


  Varnish官方网站:http://www.varnish-cache.org/

  另有一份PDF文档,说明Varnish原理的:http://ishare.iask.sina.com.cn/cgi-bin/fileid.cgi?fileid=2163384

  我测试了一下,在同等配置环境下,Varnish的性能确实要超过Squid,稳定性也不错,值得继续去深入研究。

IT流言终结者1:Varnish vs Squid

http://www.hiadmin.com/it%E6%B5%81%E8%A8%80%E7%BB%88%E7%BB%93%E8%80%851varnish-vs-squid/

UPDATE:
2008-06-11 加入了squid 2.7的测试

对于坊间流传的:
1.varnish的性能比squid高10~20倍
2.squid 3.0的性能比2.6有提高
本次测试将会揭示结果,
是否varnish的架构真的能提升那么多的性能
是否squid的新版本在性能上有所提升
测试中将不对平台.软件.等等进行优化
由于优化水平的关系将极大的影响结果.
此次测试中的数据可以作为基准数据.
可以由其中个别软件的优化与非优化结果比例系数
自行计算得出比较结果.所以个别软件的优化或者系统优化后对整体的影响
可以由读者自行对特定软件进行,并使用此基准数据进行推算.
WEB站点的页面
我将淘宝的首页获取到本地
作为测试对象
测试页面下载
index_files

平台:
PROXY:
CentOS 5.1 最小化安装
浪潮NF190
Xeon 2.8
1G RAM
73G SCSI
Squid 2.6,Squid 3.0,Varnish 1.1.2

WEB:
CentOS 5.1 最小化安装
浪潮NF180
Xeon 2.8
1G RAM
73G SCSI
Nginx 0.6.31

CLIENT:
CentOS 5.1 最小化安装
浪潮NF260
Xeon 2.4
512M RAM
36G SCSI
http_load-12mar2006

SWITCH:
DLINK DES 1024R+

1.Squid 2.6
编译参数

./ configure -- prefix =/ usr / local / squid26

配置文件

visible_hostname test2 . hiadmin . com
http_port 80 accel vhost vport
cache_peer 192.168.210.111 parent 80 0 no - query originserver name = test1
acl all src 0.0.0.0 / 0.0.0.0
http_access allow all
cache_log / var / log / squid26 / cache . log

2.Squid 3.0
编译参数

./ configure -- prefix =/ usr / local / squid30

配置文件

visible_hostname test2 . hiadmin . com
http_port 80 accel vhost vport
cache_peer 192.168.210.111 parent 80 0 no - query originserver name = test1
acl all src 0.0.0.0 / 0.0.0.0
http_access allow all
cache_log / var / log / squid30 / cache . log

3.Varnish 1.1.2
编译参数

./ configure -- prefix =/ usr / local / varnish

配置文件

backend default {
        
set backend . host = " 192.168.210.111 " ;
        
set backend . port = " 80 " ;
}

运行参数

varnishd   - f / usr / local / varnish / default . vcl - a 0.0.0.0 : 80

4.Nginx 0.6.31
编译参数

./ configure -- prefix =/ usr / local / nginx

配置文件

worker_processes   10 ;
events {
    
worker_connections   1024 ;
}
http {
    
include         mime . types ;
    
default_type   application / octet - stream ;
    
sendfile         on ;
    
keepalive_timeout   65 ;
    
server {
        
listen         80 ;
        
server_name   localhost ;
        
location / {
            
root     html ;
            
index   index . html index . htm ;
        
}
        
error_page     500 502 503 504   / 50 x . html ;
        
location = / 50 x . html {
            
root     html ;
        
}
    
}
}

5.http_load
运行参数

./ http_load - parallel 1000 - seconds 10 urls . txt
urls . txt
http : //192.168.210.222/index.html

6.squid 2.7
编译参数

./ configure -- prefix =/ usr / local / squid27

配置文件

visible_hostname test2 . hiadmin . com
http_port 80 accel vhost vport
cache_peer 192.168.210.111 parent 80 0 no - query originserver name = test1
acl all src 0.0.0.0 / 0.0.0.0
http_access allow all
cache_log / var
 
end
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics