squid官网 http://www.squid-cache.org/
1、Squid是什么?
缓存服务器,即用来存储(内存及硬盘)用户访问的网页、图片、文件等等信息的专用服务器,这种服务器不仅可以使用户最快的得到他们想要的信息,而且大大减少了网络传输的数据量,缓存服务器经常是代理服务器。对于用户是不可见。
目前常见的缓存服务器软件:squid、varnish、nginx、ats
代理服务器,1)反向代理 2)正向代理(普通代理) 3)透明代理 代理HAproxy等软件也可以去做。
2、squid、varnish、nginx区别?
squid是缓存服务器科班出生
varnish是觉得squid性能不行,纯内存缓存服务器方案
nginx cache是属于不务正业,得益于nginx强大的性能
3、Squid主要功能有哪些?
1)缓存网站内容,以达到分担源站压力加快访问速度的目的。
2)热点缓存,只缓存访问热度到达设定级别的网站内容。
3)合并回源,多个相同的请求只回源一次。
4)ACL访问控制,可针对源IP、目的地IP、域名、URL、访问时间、单一最大连接数限制访问行为。或通过外部程序验证访问者(proxy_auth)。
5)主要支持协议:HTTP、HTTPS、FTP
6)网页内容篡改,可根据需求篡改网站内容。
7)网站头部篡改,可根据需求篡改请求头部。
8)可针对不同的域名或url配置不同的缓存规则。
4、应用场景
正向代理(本地网关)
a、正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。
b、正向代理还可以使用缓存特性减少网络使用率。
c、正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。
透明代理(cdn,架设于网络运营商主干机房)
a、提高各个地区访问者的访问速度。
b、减少源站压力。
c、减少网络运营商的网间结算费用。
d、节省网络运营商带宽资源。
反向代理(网站前端)
a、降低源站服务器的负载。
b、隐藏源站真实ip。
5、web缓存的相关概念
a、cache命中
cache命中是在cache server每次从它的缓存里满足客户端http请求发送。cache命中率,是所有客户端HTTP请求中的命中比例,web缓存典型的cache命中率在30%到60%之间,另一个相似的度量单位叫做字节命中率,描述了cache提供服务的数据容量。
提供cache命中率的方法:
1、nginx/apache expries,cache-control缓存头
2、动静分离,静态化,对静态走CDN
3、设置数据库的cache等,如设置mysql 的cache,让缓存靠前
4、4XX/5XX之类的错误页面,死链无法缓存。
5、动态不走缓存
b、cache丢失
cache丢失在cache server不能从它的缓存里面满足客户端HTTP请求时发生,cache丢失的原因有很多种:
1、当cache server第一次接受到对第一个新资源的请求时,就会产生一个cache丢失,如何解决第一次命中?
先预热或者预取
a、内部先请求访问,可以通过脚本实现(但是这个思想不太靠谱)。
b、后端生成数据之后,统一推到前端cache server,即预取、预热
2、存储空间慢,或者对象自身过期,cache server会清除这些缓存对象,以释放空间给新对象
如果解决问题2:
a、增大内存或者磁盘。
b、增大对象缓存时间
c、参数设置,缓存参数设置打一下,最大缓存对象2M(想办法多缓存热门的数据)
d、分资源缓存,如1M/10M/100M不同大小的分开缓存。(分拆服务器,acl正则匹配抛给不同的pools)
3、还有可能是客户访问的资源不可到达,原始服务器指示cache server怎样处理用户响应,如:他会提示数据不能被缓存,或在有限的时间内才被重复使用等等。
cache确认保证cache server不对访问的用户返回过期的数据,在重复使用缓存对象时,cache server需要经常从原始服务器确认它,假如服务器指示squid的拷贝仍旧有效,数据就发送出去,否则,squid更新它的存储拷贝,并且转发给客户
当用户更新了数据到数据库或者存储服务器的时候,可以从业务角度主动调用接口清楚该对象缓存的指令。
对应缓存来讲,数据的一致性是一个特别头疼的问题,特别是memcached。
CDN删除数据一般需要5-15分钟才能删除完成。
图片放到CDN一般是不要更新了,图片修改算更新,这种业务就要推送。
删除图片再上传,这种不算修改,而是一个新的资源。老是数据,CDN会有相应的算法,在一定的时间内自动删除。
网站改版:在CDN上推送js、css(改名推送)等程序。
6、三种代理服务器的原理
普通代理(传统代理)
传统的代理服务器就是通过浏览器设置代理的方法。
用户访问网站,先到squid代理服务器,如果squid代理服务器有数据,那么squid就直接从缓存中放回给用户,如果squid缓存中没有,那么squid就代替用户去访问网站,把数据返回的给用户的同时留一份到缓存中,一遍下次用户(或者其他用户)访问的时候,直接从缓存中返回给用户
透明代理:
所谓的透明代理,是相对于普通代理服务而言,客户端不需要做任何和代理服务器相关的设置,对用户而言,感觉不到代理服务器的存在,所以称之为透明代理,即把代理服务器部署在核心的上网出口,当用户上网浏览页面时,会交给代理服务器向外请求,如果结合iptables可以实现代理+网关+内容过滤+流量安全控制等完整的上网解决方案。
透明代理流程说明:
用户A发送一个访问请求到防火墙,由防火墙将该用户的访问请求转发给Squid,squid再先检查自身缓存中有无该用户请求的访问内容,如果没有,则请求远端目的的服务器,获取该用户的访问内容,再放回给用户的同时,在自身缓存保留一份记录以备下次调用,当用户B发送一个和用户A相同的请求到防火墙时,有防火墙转发该用户请求到squid,squid检查到自身缓存发现有相同的内容,直接将该内容放回给用户B。而无需再次去访问请求的服务器。
普通代理和透明代理的区别就是,普通代理需要在客户端浏览器设置指定代理服务器,而透明代理不需要。
反向代理服务原理:
普通代理方式是代理内部网络用户请求internet上服务器的连接请求,客户端必须指定代理服务器,并将本来要直接发送到internet上的服务器的连接请求发送给代理服务器处理,
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从内部服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外表现为一个服务器。
反向代理流程说明:
squid做反向代理服务器,通常工作在一个服务器集群的前端,在用户看来,squid服务器就是他所要访问的服务器,而实际意义上,squid只是接受用户的请求,同时将用户请求转发给内部真正的WEB服务器,如果squid本身有用户要访问的内容,则squid直接将数据返回给用户,起到了缓存数据的作用,减少了后端服务器的压力。