squid 代理缓存服务器

    Squid cache(简称为Squid)是一个流行的自由软件,它符合GNU通用公共许可证。Squid作为网页服务器的前置cache服务器,可以代理用户向web服务器请求数据并进行缓存,也可以用在局域网中,使局域网用户通过代理上网。Squid主要设计用于在Linux一类系统运行

代理服务器原理

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

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

    目前国内众多CDN厂商都是使用软件技术—Squid也就是代理服务器的方式实现,其本身成本比较低、配置方便灵活.其内容服务模式是基于缓存服务器,也叫做代理缓存.主要的技术是网络负载均衡(多个squid代理服务器)、动态内容分发复制和缓存技术,简单的说当一个用户访问已经加入CDN服务(squid代理)的网站时,用户的请求并不直接发送到后端web服务器,而是发送到squid服务器(CDN中称节点),squid再根据本地的DNS记录向后端的目标web服务器发送请求,请求有响应并返回数据时squid会先将数据缓存一份到本地服务器上,然后返回结果给用户,当下一位客户访问相同的内容时直接从squid上返回结果而不经过后端web服务器,从而节约网站带宽,加速客户访问速度


  工作层次  :应用层

  正向代理 3128 8080    反向代理  80

   优点:安全性高

  缺点:支持应用少

日志标志分析


配置


Squid中策略实现


  1. 先定义策略元素

  2. 定义策略,引用策略元素

首先用acl定义策略元素


squid 代理缓存服务器_Internet

定义策略,引用策略元素


squid 代理缓存服务器_web服务器_02


可根据自己的需求添加,

更多的策略,当然更为详细的可以到官网上查看,这里只是一部分

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 框架实现。


squid 代理缓存服务器_代理服务器_03

虽然画的图很丑,但是至少能说明原理吧。

*******的线是网络数据,走代理

****蓝线dns数据,走net

配置步骤:

  1. 打开路由功能
    /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的应用

squid 代理缓存服务器_Internet_04

当用户访问web服务器时,实际上被dns解析到缓存服务器上,当所访问的数据缓存服务器上没有时,它将会向自己的兄弟服务器发出请求查询,如果兄弟也没有,就向他的父服务器发出查询请求,父服务器没有,在向web查询,查询到的结果,父服务器缓存并发送给要查询的子服务器,子服务器缓存并发送给用户,这样当用户下一次再来访问时,就可以直接从缓存中提取,发送了


Cache1

squid 代理缓存服务器_软件技术_05


squid 代理缓存服务器_web服务器_06


squid 代理缓存服务器_局域网_07





Cache2

添加基本的配置(内存缓存、硬盘缓存目录及大小、出错页面显示的信息)

squid 代理缓存服务器_局域网_08

改变服务器端口(因为当客户访问时默认80

squid 代理缓存服务器_局域网_09

squid 代理缓存服务器_web服务器_10




Cache3

squid 代理缓存服务器_代理服务器_11


squid 代理缓存服务器_代理服务器_12


squid 代理缓存服务器_局域网_13


Web

编辑页面,文本内容“hello”,创建物理目录kk

squid 代理缓存服务器_局域网_14

squid 代理缓存服务器_局域网_15


测试:

squid 代理缓存服务器_Internet_16

访问物理目录

squid 代理缓存服务器_web服务器_17

查看缓存目录和文件

[root@new ~]# 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
[root@new ~]#



缓存的页面内容



squid 代理缓存服务器_代理服务器_18


此时 cache1 父服务器也都有了缓存



Cache1 日志分析

root@localhost ~]# 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