Let's Go!

代理服务器 Squid

上一篇 / 下一篇  2011-10-28 16:51:26 / 个人分类:你知道吗?

 

代理服务器 Squid

软件下载:

http://www.oschina.net/p/squid/

Squid中文权威指南

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

 

Squid是什么,Squid工作原理是什么

 

Squid是什么
  Squid是一种用来缓冲Internet数据的软件。它是这样实现其功能的,接受来自人们需要下载的目标(object)的请求并适当地处理这些请求。也就是说,如果一个人想下载一web页面,他请求Squid为他取得这个页面。Squid随之连接到远程服务器(比如:http://squid.nlanr.net/)并向这个页面发出请求。然后,Squid显式地聚集数据到客户端机器,而且同时复制一份。当下一次有人需要同一页面时,Squid可以简单地从磁盘中读到它,那样数据迅即就会传输到客户机上。当前的Squid可以处理 HTTP,FTP,GOPHER,SSL和WAIS等协议。但它不能处理如POP,NNTP,RealAudio以及其它类型的东西。
Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。
Squid 将数据元缓存在内存中,同时也缓存DNS查询的结果,除此之外,它还支持非模块化的DNS查询,对失败的请求进行消极缓存。Squid支持SSL,支持访问控制。由于使用了ICP(轻量Internet缓存协议),Squid能够实现层叠的代理阵列,从而最大限度地节约带宽。
Squid由一个主要的服务程序squid,一个DNS查询程序dnsserver,几个重写请求和执行认证的程序,以及几个管理工具组成。当Squid启动以后,它可以派生出预先指定数目的dnsserver进程,而每一个dnsserver进程都可以执行单独的DNS查询,这样一来就大大减少了服务器等待DNS查询的时间。
  Internet缓冲的一些概念
  你可能会想到一些问题:缓冲有多大的用处?什么时候目标(object)应该或者不应该被缓冲?例如,缓冲信用卡号码是完全不适合的,脚本文件的执行结果在远程服务器端,站点经常更新(象www.cnn.com)或者甚至站点不允许缓冲,这些情况也都是不适合缓冲的。
  Squid处理各种情况是不错的(当然,这需要远程站点按标准形式工作)。
  可执行的cgi-bin脚本文件不被缓冲,返回正确页眉的页面是在一段限制了的时间内被缓冲,而且你可以规定特殊的规则以确定什么是可以或不可以被缓冲的,还有缓冲的时间为多长。
  谈到缓冲的用处有多大,这要看Internet的容量大小,各有不同。对于小型的缓冲区(几转磁盘空间)来说,返回值非常高(达到25%)。这个空间缓冲经常访问的站点,如netscape,cnn和其它一些类似情况的站点。如果你增加一倍缓冲的磁盘空间,但你不会成倍增加你的命中率。这是因为你开始缓冲网络中剩余部分时,这些通常时很大的而且很少被访问。一个非常大的高速缓冲区,有20转左右,可能返回值仍小于50%,除非你对保存数据的时间长短经常改变(一般地你不要分配20转的磁盘空间,因为页面很快就会过时,应该被删除掉)。
  我们在这里说的目标(object)指的是可保存的web页面或其它类似的可下载页面(ftp文件或目录内容也称为目标(object))。
  Squid运行在什么系统上?
  Squid可运行在大多数Unix和OS/2版本的系统之上,已知的可工作的有:
  AIX,Digital Unix,FreeBSD,HP-UX,Irix,Linux,NetBSD,Nextstep,SCO,Solaris

SQUID如何工作
[传统代理]
1.SQUID被绑定到代理服务器的3128端口。
2.客户端浏览器被配置使用代理服务器的3128端口。
3.客户端不需要配置DNS。4.代理服务器上需要配置代理服务器。
5.客户端不需要配置缺省路由。
当我们在客户端浏览器中打开一个web请求,比如“http://www.96333.com”,这时将陆续发生以下事件:
1.客户端使用某一端口(比如1025)连接代理服务器3128端口,请求web页面“http://www.96333.com”
2.代理服务器向DNS请求“www.96333.com”,得到相应的IP地址2.3.4.5。然后,代理服务器使用某一端口(比如1037)向该IP地址的80端口发起web连接请求,请求web页面。
3.收到响应的web页面后,代理服务器把该数据传送给客户端。
4.客户端浏览器显示该页面。
从www.96333.com的角度看来,连接是在1.2.3.4地1037端口和2.3.4.5的80端口之间建立的。
从client的角度看来,连接是在192.168.1.100的1025端口和1.2.3.4的3128端口之间建立的。
[透明代理]
透明代理的意思是客户端根本不需要知道有代理服务器的存在。
在以上基础上我们做以下工作:
1.配置透明代理服务器软件运行在代理服务器的3128端口。
2.配置代理服务器将所有对80端口的连接重定向到3128端口。
3.配置客户端浏览器直接连解到Internet。
4.在客户端配置好DNS.
5.配置客户端的缺省网关为192.168.1.1.
当我们在客户端浏览器中打开一个web请求,比如“http://www.96333.com”,这时将陆续发生以下事件:
1.客户端向DNS请求“www.96333.com”,得到相应的IP地址2.3.4.5。然后,客户端使用某一端口(比如1066)向该IP地址的80端口发起web连接请求,请求web页面。
2.当该请求包通过透明代理服务器时,被防火墙将该数据包重定向到代理服务器的绑定端口3128。于是,透明
代理服务器用某一端口(比如1088)向2.3.4.5的80端口发起web连接请求,请求web页面。
3.收到响应的web页面后,代理服务器把该数据传送给客户端。
4.客户端浏览器显示该页面。
从www.96333.com的角度看来,连接是在1.2.3.4地1088端口和2.3.4.5的80端口之间建立的。从client的角度看来,连接是在192.168.1.100的1066端口和2.3.4.5的80端口之间建立的。
以上就是传统代理服务器和透明代理服务器的区别所在。
[反向代理]
反向代理是相对于传统代理而言,是代理web服务器接受客户端的请求。在此,我们忽略客户端的设置,假设客户端是可以直接访问互联网
web服务器与客户端的结构如下:
假设已经将www.96333.com的域名指向了squid服务器所在的ip,并且在web服务器集群里做了dns轮询。
web server1 -|
web server2 -|- squid 服务器/ INTERNET / - Client
web server3 -|
1.客户端通过IE向DNS服务器发送访问www.96333.com的请求,由客户所在地的DNS服务器解析www.96333.com的IP为2.3.4.5并返回给用户。
2.客户收到DNS返回的服务器IP地址,重新向www.96333.com指向的IP地址发送访问请求。
3.squid 服务器接收到用户的请求后,查询自身缓存中是否有用户请求内容,有则直接发送给客户端,如果没有则通过内部DNS轮询查询空闲服务器,并将客户请求发送到该服务器,在获取到用户数据并返回给用户的同时保留一份在自己本身的缓存当中。在用户看来,自己访问的是www.96333.com这个服务器,实际上真正的WEB服务器为SQUID缓存后面的服务器或者服务器集群,通过外部DNS做CNAME转向,将用户请求转发到内部真正的web服务器上去。
 
Squid工作原理是什么
一、SQUID缓存的存放方式:
每一台Squid 代理服务器上都有若干颗硬盘,每颗硬盘又分割成多个分区,每一个分区又可建立很多目录,目录下才放文件(Squid 把它叫object)。
二、SQUID的查询方式:
SQUID通过查询表的方式来定位某个资源的位置,所查询的表叫Hash table 和Digest table;Digest table在这里可以称之为摘要或者索引,它记录了磁盘上每个分区,每个目录里存的缓存摘要,Hash table在这里可以称之为目录或者提纲,它记录所有的Digest table表信息,SQUID接受到请求后先查询Hash table,在根据Hash table所指向的Digest table查询需要的信息。
三、SQUID服务器之间的关系:
SQUID服务器存在两种工作关系,一种为Child、Parent,当child squid server没有用户需要的数据时,就象parent server发出请求,并持续等待,直到parent server回应自己为止;另外一种为ibling,当本地SQUID server没有用户请求数据时,会向sibling server发出请求,如果sibling server没有资料则会向上级sibling或者INTERNET发送数据请求

四、SQUID运作模式
1. 当Squid Server 没有资料时,会先向Sibling 的Squid Server 要资料,如果Sibling没资料,就跳过它直接向Parent 要。
2. 向Parent 要资料,然後一直等,直到Parent 给它资料为止(Parent 自己有的资料或上Internet 去拿)。
3. 没有Parent 时,就自己上Internet 去拿。
4. 如果这三者都拿不到资料,才向用户端回报拿不到资料。
一般而言,把网路上一层的Squid Server 设成Sibling 是不错的选择(例如:一个学校将所在城市网和附近的大学设成Sibling),因为网路上一层的Squid Server 服务对象较多,其硬件功能较强,离我们比较近,速度也比较快;万一要不到资料,我们还可以自己上Internet 去拿。那什麽时候设Parent?当您的出口只有一个,或上一层Squid Server 拿不到资料,自己也一定拿不到,只好将上一层Squid Server 设为Parent。


转自http://wuhaoshu.blog.51cto.com/845270/399781

更多学习资料http://home.arcor.de/pangj/squid/index.html

 

 

百度介绍:

http://baike.baidu.com/view/490519.htm

 

 

Squid是一种在Linux系统下使用的优秀的代理服务器软件。

  squid不仅可用在Linux系统上,还可以用在AIX、Digital Unix、FreeBSDHP-UXIrixNetBSDNextstepSCOSolaris等系统上。

  Squid与Linux下其它的代理软件如ApacheSocks、TIS FWTK和delegate相比,下载安装简单,配置简单灵活,支持缓存和多种协议。用ipchains+Squid的解决方案,就可以获得通过缓存高性能的同时能够无缝的访问Internet。

  Squid是一个缓存internet数据的一个软件,它接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户想要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid 连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。

  对于Web用户来说,Squid是一个高性能的代理缓存服务器,可以加快内部网浏览Internet的速度,提高客户机的访问命中率。Squid不仅支持HTTP协议,还支持FTPgopherSSLWAIS等协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。

  Squid将数据元缓存在内存中,同时也缓存DNS查寻的结果,除此之外,它还支持非模块化的DNS查询,对失败的请求进行消极缓存。Squid支持SSL,支持访问控制。由于使用了ICP,Squid能够实现重叠的代理阵列,从而最大限度的节约带宽。

  Squid由一个主要的服务程序Squid,一个DNS查询程序dnsserver,几个重写请求和执行认证的程序,以及几个管理工具组成。当Squid启动以后,它可以派生出指定数目的dnsserver进程,而每一个dnsserver进程都可以执行单独的DNS查询,这样一来就大大减少了服务器等待DNS查询的时间。

  Squid的另一个优越性在于它使用访问控制清单(ACL)和访问权限清单(ARL)。访问控制清单和访问权限清单通过阻止特定的网络连接来减少潜在的Internet非法连接,可以使用这些清单来确保内部网的主机无法访问有威胁的或不适宜的站点。

  Squid对硬件的要求是内存一定要大,不应小于128M,硬盘转速越快越好,最好使用服务器专用SCSI硬盘,处理器要求不高,400MH以上既可。

squid配置

  squid是Linux下的一个代理服务器,本文限于篇幅,简单介绍一下squid配置,在文章结尾处提供一个squid配置的word文件供大家下载。

  代理服务器原理

  代理服务器接受到请求后,首先与访问控制列表中的访问规则相对照,如果满足规则,则在缓存中查找是否存在需要的信息。

  客户端B向代理服务器提出相同的请求。代理服务器也首先与访问控制列表中的访问规则相对照。如果满足规则,则将缓存中的信息传送给客户端B

  squid简介

  访问控制清单和访问权限清单通过阻止特定的网络连接来减少潜在的Internet非法连接,可以使用这些清单来确保内部网的主机无法访问有威胁的或不适宜的站点。

  以下是一些squid的基本配置参数解释

  http_port 3128 //设置监听的IP与端口号

  cache_mem 64 MB //设置内存缓冲的大小

  cache_dir ufs /var/spool/squid 2000 16 256 //设置硬盘缓冲大小

  cache_effective_user squid //设置缓存的有效用户

  cache_effective_group squid //设置缓存的有效用户组

  dns_nameservers 192.168.0.254 //设置DNS服务器地址,一般可以不设置,默认使用服务器自己设置的dns

  cache_access_log /var/log/squid/access.log //设置访问日志文件

  cache_log /var/log/squid/cache.log //设置缓存日志文件

  visible_hostname 192.168.0.20 //设置squid主机名称

  以上全局参数根据你自己的需要修改

  其实linux下的服务器配置文件最好就是squid,它对每个参数都有解释,而且很多有很多实例

  Acl的访问控制列表

  语法:acl 列表名称 列表类型 [-i] 列表值

  列表名称:用于区分Squid的各个访问控制列表,任何两个访问控制列表不能用相同的列表名。虽然列表名称可以随便定义,但为了避免以后不知道这条列表是干什么用的,应尽量使用有意义的名称,如badurl、clientip和work time等。

  列表类型:是可被Squid识别的类别。Squid支持的控制类别很多,可以通过IP地址、主机名、MAC地址和用户/密码认证等识别用户,也可以通过域名、域后缀、文件类型、IP地址、端口和URL匹配等控制用户的访问,还可以使用时间区间对用户进行管理

  -i选项:表示忽略列表值的大小写,否则Squid是区分大小写的。

  列表值:针对不同的类型,列表值的内容是不同的。例如,对于类型为src或dst,列表值的内容是某台主机的IP地址或子网地址;对于类型为time,列表值的内容是时间;对于类型为srcdomain和dstdomain,列表值的内容是DNS域名。

squid常用调试命令

  1、初始化你在 squid.conf 里配置的 cache 目录

  #squid/sbin/squid -z //第一次启动squid服务时必须输入此命令

  如果有错误提示,请检查你的 cache目录的权限。

  2、对你的squid.conf 排错,即验证 squid.conf 的 语法和配置。

  #squid/sbin/squid -k parse

  如果squid.conf 有语法或配置错误,这里会返回提示你,如果没有返回,恭喜,可以尝试启动squid。

  3、在前台启动squid,并输出启动过程。

  #squid/sbin/squid -N -d1

  如果有到 ready to server reques,恭喜,启动成功。

  然后 ctrl + c,停止squid,并以后台运行的方式启动它。

  4、启动squid在后台运行。

  #squid/sbin/squid -s

  这时候可以 ps -A 来查看系统进程,可以看到俩个 squid 进程。

  5、停止 squid

  #squid/sbin/squid -k shutdown

  这个不用解释吧。

  6、重引导修改过的 squid.conf

  #squid/sbin/squid -k reconfigure

  这个估计用的时候比较多,当你发现你的配置有不尽你意的时候,可以随时修改squid.conf,然后别忘记对你的 squid.conf排错,然后再执行此指令,即可让运行中squid重新按照你的squid.conf 来运行。

  7、把squid添加到系统启动项

  编辑 /etc/rc.d/rc.local

  添加如下行: /usr/local/squid/sbin/squid -s

  当然,并不是每个人都喜欢这种启动方式,你可以用你最习惯的方式;或者把它安装为服务。

  再来点其他的。

  1、修改cache 缓存目录的权限。

  #chown -R squid:squid /home/cache

  我的cache缓存目录是 /home/cache,squid执行用户和用户组是 squid,squid。

  2、修改squid 日志目录的权限

  #chown -R squid:squid /usr/local/squid/var/logs

  这一步并不是适合每一个使用squid的用户.意为让squid有权限在该目录进行写操作 。

  例如生成 access.log cache.log store.log

  3、查看你的日志文档。

  #more /usr/local/squid/var/logs/access.log | grep TCP_MEM_HIT

  该指令可以看到在squid运行过程中,有那些文件被squid缓存到内存中,并返回给访问用户。

  #more /usr/local/squid/var/logs/access.log | grep TCP_HIT

  该指令可以看到在squid运行过程中,有那些文件被squid缓存到cache目录中,并返回给访问用户。

  #more /usr/local/squid/var/logs/access.log | grep TCP_MISS

  该指令可以看到在squid运行过程中,有那些文件没有被squid缓存,而是现重原始服务器获取并返回给访问用户。

  关于 TCP_XXXX 等参数及代表的信息,请参看彭勇华《squid中文权威指南》13.2.1 章节。

  当然,本例中的蓝色文字是可以修改为其他的参数,例如你的域名,同样可以看到access.log里关于该域名的行。

  4、squid -k rotate 轮换squid的日志文件/var/log/squid,Squid代理服务器日志文件

  的增长速度是惊人的,很容易点球满磁盘空间导致系统不能正常工作,甚至是死机.为了解决日志文件增长太快的问题,squid采用了"轮换"的方法.在squid.conf中可以通过logfile_rotate来设置文件轮换的个数,如:

  logfile_rotate 10 ,轮换的工作一般用crontab定时器完在周期性的日志轮换,例如每周六凌晨2:00进行日志轮换,则执行如下命令: crontab -e

  0 2 * * 6 squid -k rotate

  小贴士:Squid默认的错误提示信息为英文,对于英文不好的用户来说,实在不方便.在/etc/squid/squid.conf里添加如下:

  error_directory /usr/share/squid/errors/Simplify_Chinese 即可显示中文的错误提示。

 

  • 1

    squid配置:http://www.linux520.net/9_147_zh.html

  • 2

    <http://fanqiang.chinaunix.net/a6/b6/20010626/170400681.html(Squid-Linux下的使用详解)

  • 3

    http://www.williamgibsonbooks.com(威廉·吉布森主页)


  • TAG:

     

    评分:0

    我来说两句

    Open Toolbar