设为首页 收藏本站
查看: 1417|回复: 0

[经验分享] Squid 操作实践

[复制链接]

尚未签到

发表于 2018-12-27 10:17:40 | 显示全部楼层 |阅读模式

  •   Squid简介
  •   Squid可以做什么
  •   性能要素
  •   Squid安装
  •   Squid快速体验
  •   Squid配置
Squid简介
  Squid is a caching proxy for the Web supporting HTTP, HTTPS, FTP, and more. It reduces bandwidth and improves response times by caching and reusing frequently-requested web pages. Squid has extensive access controls and makes a great server accelerator. It runs on most available operating systems, including Windows and is licensed under the GNU GPL
  翻译过来大致意思:
  Squid是一个支持HTTP,HTTPS,FTP等众多协议的缓存代理。可以降低带宽 和 提高响应时间
  squid是硬盘缓存,其使用内存作缓存内容的索引
  (一个索引在32位系统中大小是75bytes,在64位系统中是112bytes)。
  可以把squid想象成数据库,硬盘上是数据,内存中是索引:查询内存索引,发现内存位置,发出去
性能要素

  •   大内存(最重要,影响最大);快速大硬盘(第二要素,更多缓存,看网站实际数据量了,要快速的,最好是1万转以上的,如sas10K或西部数据的猛禽系列);CPU(较为次要,影响不大,特别是多核处理器基本没用)。
  •   建议匹配配置:每G磁盘空间需要32M内存。这样,512M内存的系统,能支持16G的磁盘缓存。你的情况当然会不同。
      内存需求依赖于如下事实:缓存目标大小,CPU体系(32位或64位),同时在线的用户数量,和你使用的特殊功能。估算:建立一个有足够磁盘空间,可存储 3-7天web流量数据的系统。如带宽1M,则需要约3600*1M的数据缓存(3.5G),如果一天提供8小时有效访问,则需要缓存10-28G(看重复情况了)。但Squid官方网站说法:squid使用内存表索引硬盘缓存内容,硬盘内容/内存索引=177,但要同时考虑到squid程序内存,cache_mem,硬盘缓冲cache等占用的内存。因此,我的估算:2G内存的系统,使用1.5G内存作squid索引,对应硬盘150G。
  •   关于硬盘说明:requests per second = 1000/seek time/硬盘数,一块硬盘是比较准确的,多块硬盘就不好说了。一定要用random-seek time小的盘,而随机寻道时间短意味着转速要快,越快其随机寻道时间越短!
Squid可以做什么
  squid可以做代理,也可以做防火墙,也可以提高是网站加速器,节省服务器带宽资源(为公司省钱)
Squid安装
  本人操作系统Ubuntu12.04(使用vagrant创建的虚拟机)
$ sudo apt-get install squid3  
$ sudo service squid3 stop/restart
Squid快速体验
  先备份默认配置文件
$ sudo cp /etc/squid3/squid.conf /etc/squid3/squid.default.conf  配置接受请求(默认不接受任何请求)
$ http_access deny all  修改成  http_access allow all  给代理起个名字(搜索visible_hostname )
$ visible_hostname testProxy  
$ cache_mgr admin@54php.cn
  设置dns服务地址 : 打造私有的DNS 服务
$ vim /etc/squid3/squid.conf #search dns_nameservers  
dns_nameservers 192.168.22.24 192.168.22.25
  重启服务
$ sudo service squid3 restart  然后找个浏览器设置HTTP代理地址 和  端口(默认3128)
Squid配置
  文件和日志相关配置
#指定cache在硬盘上存放的路径,最大存储40G,16个一级目录,256个二级目录  
#修改完cache_dir路径重启之前要squid3 -z
  
cache_dir ufs /data/logs/squid3/cache  40960  16 256
  

  
#squid启动和调试等信息
  
cache_log /data/logs/squid3/cache.log
  

  
#squid请求日志
  
access_log /data/logs/squid3/access.log squid
  

  
#记录进入和离开缓存的每个目标的记录
  
cache_store_log /data/logs/squid3/store.log
cache_mem  2048 MB           #squid使用共享内存大小,一般设置为内存1/3左右  
cache_swap_low 85            #配合cache_mem使用,当达到百分之85后,就把旧的内容替换直到降到百分之85
  
cache_swap_high 95
  #日志保留最近30个文件,每天轮询三次,即保留最近十天的内容.
  logfile_rotate  30
访问控制(重点)关键字 acl http_access
  acl 语法,每一行的访问控制都必须有 名字 和 类型,如下
acl aclname acltype param  常见acltype列表
类型描述例子src客户端ipacl aclname src  192.168.22.21  192.168.22.0/24dst目标ip,既访问URL的ipacl aclname dst 220.181.57.217 220.181.57.0/24arpmac地址acl aclname arp 08:00:27:dd:97:09srcdomain没想到应用场景dstdomain目标服务器域名acl aclname dstdomain   .foo.comsrcdom_regex正则表达式没想到应用场景dstdom_regex正则表达式acl aclname dstdom_regex [-i] \.foo\.comurl_regex访问url正则acl aclname url_regex [-i] ^http:// ...urlpath_regex访问path正则acl aclname urlpath_regex [-i] \.gif$port目前端口acl aclname port 80 70 21 0-1024proto协议acl aclname proto HTTP FTP ...http_statushttp 状态acl aclname http_status 200 301 500- 400-403 ...methodacl aclname method GET POST ...browseruser-agent匹配acl aclname browser [-i] regexp ...referer_regexreferer匹配acl aclname referer_regex [-i] regexp ...req_mime_type请求mine类型  acl aclname req_mime_type -i ^multipart/form-data$
  acl aclname rep_mime_type -i ^application/x-javascript$
http_access 语法格式
http_access allow|deny [!]aclname  结合acl  和 http_access 举例
acl white_ip_list  src 192.168.22.0/24  
acl deny_domain dstdomain .qq.com .taobao.com
  
http_access deny deny_domain #等价于http_access allow !deny_domain
  
http_access allow white_ip_list
refresh_pattern的作用
  主要用于一个页面进入cache后,它在cache中停留的时间。refresh_pattern规则仅仅应用到没有明确过时期限的响应。原始服务器能使用Expires头部,或者Cache-Control:max-age指令来指定过时期限
#语法  
refresh_pattern [-i] regexp min percent max [options]
  min参数就是分钟数,它是过时响应的最低时间限制,如果某个响应驻留在cache里的时间没有超过这个最低限制,那么它不会过期
  max参数也是分钟数,它是过时响应的最高时间限制,如果某个响应驻留在cache里的时间高于这个最高限制,那么它必须被刷新
  在最低和最高时间限制之间的响应,会面对squid的最后修改系数LM-factor算法LM-factor=(response age)/(resource age)
  options可能值如下
override-expire  
该选项导致squid在检查Expires头部之前,先检查min值。这样,一个非零的min时间让squid返回一个未确认的cache命中,即使该响应准备过期
  

  
override-lastmod
  
改选项导致squid在检查LM-factor百分比之前先检查min值
  

  
reload-into-ims
  
该选项让squid在确认请求里,以no-cache指令传送一个请求。换句话说,squid在转发请求之前,对该请求增加一个If-Modified- Since头部。注意这点仅仅在目标有Last-Modified时间戳时才能工作。外面进来的请求保留no-cache指令,以便它到达原始服务器。
  
一般情况可以使用 reload-into-ims。它其实是强行控制对象的超时时间,这违反了http协议的精神,但是在带宽较窄的场合,可以提高明显系统相应时间
  

  
ignore-reload
  
该选项导致squid忽略请求里的任何no-cache指令。
  
所以。如果希望内容一进入cache就不删除,直到被主动purge掉为止,可以加上ignore-reload选项,这个我们常用在mp3,wma,wmv,gif之类
  reload-into-ims例子如下:

  refresh_pattern -i .html 1440 50% 10080>
  refresh_pattern -i .htm 1440 50% 10080>
  refresh_pattern -i .shtml 1440 50% 10080>
  refresh_pattern -i .png 4320  50% 20160>
  refresh_pattern -i .gif 4320  50% 20160>
  refresh_pattern -i .bmp 4320  50% 20160>
  refresh_pattern -i .jpg 4320  50% 20160>
  refresh_pattern -i .js 4320  50% 20160>
  refresh_pattern -i .css 4320  50% 20160>
  refresh_pattern -i .swf 4320  50% 20160>  ignore-reload例子如下:
  refresh_pattern -i \.mp3$ 1440 50% 2880 ignore-reload
  refresh_pattern -i \.wmv$ 1440 50% 2880 ignore-reload
  refresh_pattern -i \.rm$ 1440 50% 2880 ignore-reload
  refresh_pattern -i \.swf$ 1440 50% 2880 ignore-reload
  refresh_pattern -i \.mpeg$ 1440 50% 2880 ignore-reload
  refresh_pattern -i \.wma$ 1440 50% 2880 ignore-reload
LM-factor
  LM-factor=(response age)/(resource age)
  举个例子,这里只考虑percent, 不考虑min 和max
  例如:refresh_pattern 20%
  假设源服务器上www.aaa.com/index.htm -----lastmodified 是 2007-04-10 02:00:00
  squid上 proxy.aaa.com/index.htm index.htm进入cache的时间 2007-04-10 03:00:00
  1)如果当前时间 2007-04-10 03:00:00
  resource age =3点-2点=60分钟
  response age =0分钟
  index.htm还可以在cache停留的时间(resource age)*20%=12分钟
  也就是说,index.htm进入cache后,可以停留12分钟,才被重新确认。
  2)如果当前时间 2007-04-10 03:05:00
  resource age =3点-2点=60分钟
  response age =5分钟
  index.htm还可以在cache停留的时间(resource age)*20%=12分钟-5=7
  LM-factor=5/60=8.3%

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-656373-1-1.html 上篇帖子: squid缓存批量更新 下篇帖子: Squid 缓存的相关操作及使用说明
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表