Squid cache(简称为Squid)是一个流行的自由软件,它符合GNU通用公共许可证。Squid作为网页服务器的前置cache服务器,可以代理用户向web服务器请求数据并进行缓存,也可以用在局域网中,使局域网用户通过代理上网。Squid主要设计用于在Linux一类系统运行
代理服务器原理
代理服务器接受到请求后,首先与访问控制列表中的访问规则相对照,如果满足规则,则在缓存中查找是否存在需要的信息。
对于Web用户来说,Squid是一个高性能的代理缓存服务器,可以加快内部网浏览Internet的速度,提高客户机的访问命中率。Squid不仅支持HTTP协议,还支持FTP、gopher、SSL和WAIS等协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求
目前国内众多CDN厂商都是使用软件技术—Squid也就是代理服务器的方式实现,其本身成本比较低、配置方便灵活.其内容服务模式是基于缓存服务器,也叫做代理缓存.主要的技术是网络负载均衡(多个squid代理服务器)、动态内容分发复制和缓存技术,简单的说当一个用户访问已经加入CDN服务(squid代理)的网站时,用户的请求并不直接发送到后端web服务器,而是发送到squid服务器(CDN中称节点),squid再根据本地的DNS记录向后端的目标web服务器发送请求,请求有响应并返回数据时squid会先将数据缓存一份到本地服务器上,然后返回结果给用户,当下一位客户访问相同的内容时直接从squid上返回结果而不经过后端web服务器,从而节约网站带宽,加速客户访问速度
工作层次 :应用层
正向代理 3128 8080 反向代理 80
优点:安全性高
缺点:支持应用少
日志标志分析
配置
Squid中策略实现
- 先定义策略元素
- 定义策略,引用策略元素
首先用acl定义策略元素
定义策略,引用策略元素
可根据自己的需求添加,
更多的策略,当然更为详细的可以到官网上查看,这里只是一部分
acl aclname src ip-address/mask ... # clients IP address [fast] acl aclname src addr1-addr2/mask ... # range of addresses [fast] acl aclname dst [-n] ip-address/mask ... # URL host‘s IP address [slow] acl aclname localip ip-address/mask ... # IP address the client connected to [fast] acl aclname arp mac-address ..(xx:xx:xx:xx:xx:xx notation) acl aclname srcdomain .foo.com ... # reverse lookup, from client IP [slow] acl aclname dstdomain [-n] .foo.com ... # Destination server from URL [fast] acl aclname srcdom_regex [-i] \.foo\.com ... # regex matching client name [slow] acl aclname dstdom_regex [-n] [-i] \.foo\.com ... # regex matching server [fast] acl aclname time [day-abbrevs] [h1:m1-h2:m2] # [fast] # day-abbrevs: # S - Sunday # M - Monday # T - Tuesday # W - Wednesday # H - Thursday # F - Friday # A - Saturday -i ^http://.*\.com.* acl aclname url_regex [-i] ^http:// ... # regex matching on whole URL [fast] acl aclname urllogin [-i] [^a-zA-Z0-9] ... # regex matching on URL login field acl aclname urlpath_regex [-i] \.gif$ ... # regex matching on URL path [fast] acl aclname rep_mime_type [-i] mime-type ... # regex match against the mime type of the reply received by # squid. Can be used to detect file download or some # types HTTP tunneling requests. [fast] # NOTE: This has no effect in http_access rules. It only has # effect in rules that affect the reply data stream such as # http_reply_access.
账号验证
只需要在配置文件中添加语句
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwd **定义账号库 auth_param basic children 5 auth_param basic credentialsttl 2 hours auth_param basic realm Example.com‘s Squid proxy-caching acl auth_user proxy_auth REQUIRED http_access allow auth_user 注释: 第一行:选择的认证方式为basic,认证程序路径和密码文件路径。 第二行:认证程序的进程数 第三行:认证有效时间 第四行:认证领域内容,上面定义的web浏览需要输入用户密码 第五,六行:设置允许认证的用户访问
产生账号及密码
在第一行中的 /etc/squid/passwd 文件可以使用下面方法生成,在装有apache的机器上运行 光盘上生成账号的包httpd-tools
生成密码文件
在第一行中的 /etc/squid/passwd 文件可以使用下面方法生成,在装有apache的机器上运行
htpasswd -c /etc/squid/passwd auth_user **第一次产生需要加- c
透明代理
透明代理的意思是客户端根本不需要知道有代理服务器的存在,它改变你的request fields(报文),并会传送真实IP,多用于路由器的NAT转发中。注意,加密的透明代理则是属于匿名代理,意思是不用设置使用代理了
非透明代理,内部网络中主机可以不配置网关和dns,
Squid 的透明代理,
由于dns过不去代理,所以让dns数据走net,方法可以利用netfilter /iptables 框架实现。
虽然画的图很丑,但是至少能说明原理吧。
*******的线是网络数据,走代理
****蓝线dns数据,走net
配置步骤:
-
打开路由功能 /etc/sysctl.conf net.ipv4.ip_forward = 1 sysctl -p 2.dns请求,使用nat转换 iptables -t nat -A POSTROUTING -p udp --dport 53 -o eth1 -j MASQUERADE 3.实现http端口的重定向 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128 客户端应用{如浏览器}不需要配置代理的地址以及端口,网卡需要配置dns指向以及网关
CDN网络中squid的应用
当用户访问web服务器时,实际上被dns解析到缓存服务器上,当所访问的数据缓存服务器上没有时,它将会向自己的兄弟服务器发出请求查询,如果兄弟也没有,就向他的父服务器发出查询请求,父服务器没有,在向web查询,查询到的结果,父服务器缓存并发送给要查询的子服务器,子服务器缓存并发送给用户,这样当用户下一次再来访问时,就可以直接从缓存中提取,发送了
Cache1
Cache2
添加基本的配置(内存缓存、硬盘缓存目录及大小、出错页面显示的信息)
改变服务器端口(因为当客户访问时默认80)
Cache3
Web
编辑页面,文本内容“hello”,创建物理目录kk
测试:
访问物理目录
查看缓存目录和文件
[[email protected] ~]# ll /var/spool/squid/00/00 total 16 -rw-r-----. 1 squid squid 631 Sep 7 23:57 00000000 -rw-r-----. 1 squid squid 628 Sep 7 23:58 00000001 -rw-r-----. 1 squid squid 489 Sep 7 23:25 00000002 -rw-r-----. 1 squid squid 483 Sep 7 23:26 00000003 [[email protected] ~]#
缓存的页面内容
此时 cache1 和 父服务器也都有了缓存
Cache1 日志分析
[email protected] ~]# tail -f /var/log/squid/access.log 1441639530.966 49 192.168.3.1 TCP_MISS/200 491 GET http://192.168.3.101/kk/ - TIMEOUT_DEFAULT_PARENT/192.168.3.102 text/html 1441639531.001 8 192.168.3.1 TCP_MISS/404 1653 GET http://192.168.3.101/favicon.ico - FIRST_PARENT_MISS/192.168.3.102 text/html 1441639537.437 11 192.168.3.1 TCP_MISS/200 488 GET http://192.168.3.101/ - FIRST_PARENT_MISS/192.168.3.102 text/html 1441639556.676 0 192.168.3.100 UDP_MISS/000 53 ICP_QUERY http://192.168.3.100/favicon.ico - NONE/- - 1441639563.911 0 192.168.3.100 UDP_MISS/000 42 ICP_QUERY http://192.168.3.100/ - NONE/- - 1441639571.232 0 192.168.3.100 UDP_MISS/000 53 ICP_QUERY http://192.168.3.100/favicon.ico - NONE/- - 1441641459.887 0 192.168.3.100 UDP_MISS/000 53 ICP_QUERY http://192.168.3.100/favicon.ico - NONE/- - 1441641459.893 0 192.168.3.100 TCP_MEM_HIT/200 522 GET http://cache1/squid-internal-periodic/store_digest - NONE/- application/cache-digest 1441641461.290 0 192.168.3.100 UDP_MISS/000 44 ICP_QUERY http://192.168.3.100/kk - NONE/- - 1441641461.693 0 192.168.3.100 UDP_MISS/000 53 ICP_QUERY http://192.168.3.100/favicon.ico - NONE/- -
http://www.chnlanker.com/web-server/3760.html