Squid Web 代理缓存
Squid是一个能够作为HTTP、FTP、以及其他请求的代理服务器使用的互联网对象缓
存。客户端会从Squid请求URl,如果之前客户端想Squid发出过同样的请求,Squid会根
据缓存副本提供URL,同时装法与URL相关的动态内容(CGL可执行程序,服务器解析的页
面,)而不是从缓存中提分工这些内容。
还可将Squid当做HTTP加速器使用。和Squid作为代理服务器代表客户机发出URL请求
一样,Squid作为加速器可使用squid服务代表服务器发出URL请求。
反向代理服务器又称web加速服务器,位于web服务器前端,充当web服务器的内容缓
存器。反向代理服务器是针对web服务器设置的,后台web服务器对互联网用户是透明的
,用户只能看到反向代理服务器的地址,不清楚后台服务器是如何组织架构的。
当用户请求web服务时,dns将请求的域名解析为反向代理服务器的ip地址,这样url请求
将被发送到反向代理服务器,由反向代理服务器负责处理用户的请求与应答,与后台web
服务器交互。
利用反向代理服务器减轻后台web服务器的负载,提高访问速度。避免用用户直接与
web服务器通信带来的安全隐患。
反向代理软件,比较有名的有Nginx和Squid
客户端请求访问web服务时,dns将访问的域名解析为squid反向代理服务器的ip地址,这
样客户端的url请求将发送到反向代理服务器。
如果squid反向代理服务器中缓存了该请求的资源,则将该请求直接返回给客户端,否则
squid将向后台的web服务器请求资源,然后将请求的应答返回给客户端,同时也是将该应
答缓存在本地,供下一个请求者使用。
Squid反向代理一般只缓存可缓冲的数据,如:html静态网页和图片,而一些cgi脚本程
序或者asp,jsp动态程序默认不缓存。
软件包:squid
守护进程:/usr/sbin/squid 服务启动脚本 /etc/init.d/squid
端口:3218(可配置) 配置文件:/etc/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_dir ufs /var/squid
cache_mem 32MB
cache_swap_low 90
cache_swap_high 95
#Squid缓存的文件系统、位置和缓存策略;在这里,Squid会将/var/squid目录作为
保存缓存数据的目录,每次处理的缓存大小是32兆字节,当缓存空间使用达到95%时,新
的内容将 取代旧的而不直接添加到目录中,直到空间又下降到90%才停止这一活动。
cache_access_log /var/squid/access.log
#用户的访问记录
visible_hostname No1.proxy
#Squid在错误页面中显示的服务器名称
访问控制
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
#all,控制方式是src源IP地址,控制目标是0.0.0.0/0的IP地址,即所有未定义的用
户。出于安全考虑,总是在最后禁止这个列表。上面几行代码告诉Squid不允许baduser
组访问Internet,但advance、normal组允许(此时还没有指定详细的权限)。由于
Squid是按照顺序读取规则,会首先禁止baduser,然后允许normal。如果将两条规则顺
序颠倒,由于baduser在normal范围中,Squid先允许了所有的normal,那么再禁止
baduser就不会起作用。
error_directory /usr/share/squid/errors/SimplyChinese
#错误页面导向的文件
激活Squid
1)初始化cache目录
/usr/local/sbin/squid -z
2)在开启squid之前,你应该验证其配置文件是否正确。运行如下命令即可:
squid -k parse
3)启动squid服务
service squid start
5.29补充:反向代理配置和ACL一些实例
访问控制(ACL)
ACL元素是Squid的访问控制的基础。这里告诉你如何指定包括IP地址,端口号,主机名
,和URL匹配等变量。每个ACL元素有个名字,在编写访问控制规则时需要引用它们。基
本的ACL
元素语法如下:
acl name type value1 value2 ...
例如:
acl Workstations src 10.0.0.0/16
在多数情况下,你能对一个ACL元素列举多个值。你也可以有多个ACL行使用同一个名字
。
例
如,下列两行配置是等价的:
acl Http_ports port 80 8000 8080
acl Http_ports port 80
acl Http_ports port 8000
acl Http_ports port 8080
IP地址
使用对象:src,dst,
squid在ACL里指定IP地址时,拥有强有力的语法。你能以子网,地址范围,域名等形式
编写地址。
有时候你可能想列举多个相邻子网,在这样的情况下,通过指定地址范围很容易做到。
例如:
acl Bar src 172.16.10.0-172.16.19.0/24
正则表达式
使用对象:url_regex, urlpath_regex, browser,
大量的ACL使用正则表达式来匹配字符串,对squid来说,最常使用的正则表达式功能用
以匹配字符串的开头或结尾。例如,^字符是特殊元字符,它匹配行或字符串的开头:
^http://
该正则表达式匹配任意以http://开头的URL。$也是特殊的元字符,因为它匹配行或字符
串的结尾:
.jpg$
TCP端口号
使用对象:port
该类型是相对的。值是个别的端口号或端口范围。
acl Foo port 123
acl Bar port 1-1024
proto
该类型指URI访问(或传输)协议。如下是有效值:http, https , ftp。
acl FTP proto FTP
http_access deny FTP
反向代理
配置
http_port IP:80 vhost #配置 squid 为加速模式,vhost 支持虚拟主机。
cache_peer 192.168.1.51 parent 80 0 originserver weight=200 max-conn=50
cache_peer 192.168.1.52 parent 80 0 originserver weight=200 max-conn=400
cache_peer 192.168.1.53 parent 80 0 originserver weight=100 max-conn=400
cache_peer指令定义邻居cache,并告诉squid如何与它的邻居通信:
cache_peer hostname type http-port icp-port [options]
第1个参数是邻居的主机名,或IP地址。可以安全的在这里使用主机名,因为squid会解
析它们。在squid运行期间,主机名对应的IP地址可能会改变,所以实际上squid会周期
性的解析主机名。邻居主机名必须唯一:不能在2个邻居cache上使用同样的主机名,即
使它们有不同的端口。
第2个参数指定邻居cache的类型。有3个选择:父亲,姐妹,或广播。父亲和姐妹关系容
易理解。
第3个参数是邻居HTTP端口号。它应该等同于邻居的http_port设置。总是应该指定1个
非零的HTTP端口号。
第4个参数指定ICP或HTCP端口号。squid默认使用ICP来查询其他cache。也就是说,
squid发送ICP查询到邻居cache的指定端口。假如你增加了htcp选项,squid就会发送
HTCP查询到这个端口。默认的ICP端口是3130,默认的HTCP端口是4827。假如增加了
htcp选项,请记得改变它的端口号。将端口号设为0,会禁止ICP和HTCP。然而,应该使
用no-query选项来禁止这些协议。