分享下自己测试squid缓存节点配置文件,如果有不足之处请大家多提意见。
测试的版本已经完全支持http/1.1squid版本:Squid Cache: Version 3.1.5http_port 80 vhost #squid监听端口,vhost表示根据请求主机头来转发到后端WEB机器http_port 8080 vhost vport #vport 虚拟主机的支持icp_port 0 #提供从相邻的squid查询端口,如果不提供该服务,可一将端口改为0unique_hostname host100 #防止cache主机名冲突dns_nameservers 192.168.1.100 #指定内部DNS服务器 cache_replacement_policy heap LFUDA #控制了squid的磁盘cache的置换策略(例如响应时间,命中率,字节命中率等),一般分为三类,我们只用了LFUDAmemory_replacement_policy heap LFUDA #原理同上cache_dir aufs /data/cache/cache1 40960 16 256 max-size=204800 指定cache在硬盘上存放的路径,最大存储40G,16个一级目录,256个二级目录,如果不缓存任何文件可以指定 null文件系统,max-size指定缓存文件最大值,默认以字节为单位。cache_dir aufs /data/cache/cache2 40960 16 256 max-size=204800logformat cdn %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st %tr "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh 日志格式cache_log /data/cache/logs/cache.log #squid启动和调试等信息access_log /data/cache/logs/access.log cdn #squid请求日志cache_store_log none #squid缓存日志,这里禁掉了(请求响应的细化记录,data,last-modified,expires头部值)cache_effective_user squid #squid对应系统管理用户cache_effective_group squid #squid对应系统管理组tcp_recv_bufsize 65535 bytes #接受缓存大小,用来建立tcp socketlogfile_rotate 4 #日志轮训,保留最近得4份日志pid_filename /usr/local/squid/var/logs/squid.pid #squid进程pid路径cache_mem 2048 MB #squid使用共享内存大小,一般设置为内存1/3左右cache_swap_low 85 #配合cache_mem使用,当达到百分之85后,就把旧的内容替换直到降到百分之85 cache_swap_high 95 maximum_object_size 4096 KB #单个文件最大缓存大小maximum_object_size_in_memory 512 KB #单个文件在内存中最大缓存大小reply_body_max_size 5116 KB #访问列表限制对HTTP响应主体的最大可接受值 minimum_object_size 1 bytes #单个文件最小缓存大小ipcache_size 65535 #DNS正反解所得到的IP存在缓存区的大小,这样可以加快解析速度 fqdncache_size 65535 #DNS正反解所得到的域名存在缓存区的大小,这样可以加快解析速度request_header_max_size 5 KB #限制http请求header头得大小,一般为512字节quick_abort_min 1 MBquick_abort_max 5 MBquick_abort_pct 80#控制squid是否继续传输被用户中断的请求,当用户中断请求时,squid把检测 quick_abort 的值。如果剩余部分小于“quick_abort_min”指定的值,squid 把继续完成剩余部分的传输;如果剩余部分大于“quick_abort_max”指定的值,squid 把终止剩余部分的传输;如果已完成“quick_abort_pct”指定的百分比,squid把继续完成剩余部分的传输。#keepalivedclient_persistent_connections off #因为现在的IE都是多线程,考虑到服务器带宽等网络资源消耗,所以长链接关闭server_persistent_connections on #服务端长链接是用于在服务器端传递消息时使用已打开的socket链接以节省资源而设置的。request_timeout 2 minutes #客户端请求超时时间persistent_request_timeout 1 minutes #持续连接时间(建议和后端WEB服务器或者keepalive一致)read_ahead_gap 16 KB #当从其他服务器取数据的时候,先发给客户端这样一个大小的检验。negative_ttl 0 minutes #一个失败请求的存活时间negative_dns_ttl 0 minutes #缓存失败的DNS查询结果的生存时间positive_dns_ttl 10 minutes #缓存成功的DNS查询结果的生存时间range_offset_limit -1 KB #预先现在用户请求的文件,设置一定要小于maximum_object_size的值,不然就会浪费很多带宽的,最好不要设置。client_lifetime 60 minutes #客户端连接超时时间half_closed_clients off #用户请求处于半关闭状态squid会保持这种状态,直到返回套接字的读写错误才将其关闭,这样会浪费系统资源;设置为off,有了这种状态立即关闭请求。pconn_timeout 100 seconds #squid与其他服务器建立连接多久闲置时间关闭回话。shutdown_lifetime 20 seconds #当收到SIGTERM或者SIGHUP信号后,squid将进入一种shutdown pending的模式,等待所有活动的套接字关闭,如果过了这个值,就返回客户端超时。connect_timeout 1 minute #连接超时时间#peer_connect_timeout 30 seconds #到父层或源站请求超时时间cache_mgr admin@51cdn.com #管理员联系方式httpd_suppress_version_string on #隐藏服务器信息(比如一些页面拒绝访问,或出现循环)visible_hostname 51cdn.com #可见主机名memory_pools on #内存池设置为打开memory_pools_limit 64 MB #设置内存池大小via off #检查squid请求路由的一个标志,当客户端请求到达第一个代理服务器时,该服务器会在自己发出的请求里面添加 Via 头部,并填上自己的相关信息,当下一个代理服务器 收到第一个代理服务器的请求时,会在自己发出的请求里面复制前一个代理服务器的请求的Via 头部,并把自己的相关信息加到后面,以此类推,当OCS收到最后一个代理服务器的请求时,检查 Via 头部,就知道该请求所经过的路由。forwarded_for on #关闭此项将在访问某些论坛时显示的IP是代理服务器的IP,如果打开则显示是客户请求IP。store_avg_object_size 13 KB #平均对象大小,所有文件大小/文件数量在10-13KB之间,store_objects_per_bucket 256 #每个objects,存储对象都会有一个hash表,降低或者增加这个值,也能改善store的效率strip_query_terms off #当改为on时在问号(?)之后的所有字节被删除,默认是开启的,这里我们关闭,就是能记录(?)后面的参数了。prefer_direct on #默认squid先发请求到邻居cache,如果改为on,取源失败,邻居cache变为备份。coredump_dir /data/cache/logs #squid突然挂掉的时候,或者突然出现什么故障的时候,将squid在内存中的资料写到硬盘中。################Purge######################### PURGE 是另一个特殊的请求方法,Squid专有,不准许你RFC;可以让管理员强制刷新缓存,我这里限制只有在本地才能更新缓存acl mypurge src 127.0.0.1acl Purge method PURGEhttp_access allow mypurge Purgehttp_access deny Purge#如下不缓存动态的内容hierarchy_stoplist cgi-bin ? hierarchy_stoplist -i ^https:\\ ? acl QUERY urlpath_regex -i cgi-bin \? \.php \.xml \.jsp \.js \.doacl denyssl urlpath_regex -i ^https:\\ acl dy_cache urlpath_regex swf\?acl dy_cache urlpath_regex html\?acl dy_cache urlpath_regex htm\?acl dy_cache urlpath_regex exe\?acl dy_cache urlpath_regex css\?acl dy_cache urlpath_regex js\?acl dy_cache urlpath_regex cab\?acl dy_cache urlpath_regex asp\?acl dy_cache urlpath_regex aspx\?acl dy_cache urlpath_regex php\?acl dy_cache urlpath_regex jsp\?acl dy_page url_regex -i ^http:\/\/www1\.51cdn\.com\/.*\?.*$no_cache deny QUERYno_cache deny denysslno_cache deny dy_cacheno_cache deny dy_pageacl www dstdomain .51cdn.comalways_direct allow wwwhttp_access allow www##############Refresh_pattern#################refresh防止客户端一直刷新照成cache回源确认,对此设置了缓存时间。间接的控制磁盘缓存,宽松的设置增加了cache的命中率,同样也增加了用户接受过时相应的几率; 保守的设置,降低了cache的命中率和过时响应。Refresh _pattern [-i] regexp min percent max [Option] min和max是分钟数refresh_pattern算法描述:1、如果响应年龄超过refresh_pattern 的max值,该响应过期;2、如果LM-factor 少于refresh_pattern 的percent的值。该响应存活3、如果响应年龄少于refresh_pattern 的min值,该响应存活4、其他情况,响应过期LM-factor算法描述:Resource age=对象进入cache的时间 – 对象的last_modifiedResponse age= 当前时间 – 对象进入cache的时间LM-factor =(response age)/(resource age )Refresh _pattern [-i] regexp min percent max [Option]#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时间戳时才能工作。#ignore-reload:导致squid忽略请求里的任何no-cache指令,一旦缓存,就不删除,除非purge掉。refresh_pattern -i ^http:\/\/www1\.51cdn\.com\/.*\.(html|jpeg|bmp|png|gif|).*$ 120 100% 240 reload-into-ims refresh_pattern -i \/$ 15 90% 600 reload-into-imsrefresh_pattern -i \.html$ 15 90% 60 reload-into-imsrefresh_pattern -i \.htm$ 15 90% 600 reload-into-imsrefresh_pattern -i \.shtml$ 15 90% 600 reload-into-imsrefresh_pattern -i \.vhtml$ 30 90% 600 reload-into-imsrefresh_pattern -i \.hml$ 15 90% 600 reload-into-imsrefresh_pattern -i \.php$ 1440 90% 129600 reload-into-imsrefresh_pattern -i \.asp$ 15 90% 600 reload-into-imsrefresh_pattern -i \.jsp$ 1440 90% 8640 reload-into-imsrefresh_pattern -i \.gif$ 1440 90% 129600 reload-into-imsrefresh_pattern -i \.swf$ 1440 90% 129600 reload-into-imsrefresh_pattern -i \.jpg$ 1440 90% 129600 reload-into-imsrefresh_pattern -i \.png$ 1440 90% 129600 reload-into-imsrefresh_pattern -i \.bmp$ 1440 90% 129600 reload-into-imsrefresh_pattern -i \.js$ 120 90% 600 reload-into-imsrefresh_pattern -i \.css$ 120 90% 600 reload-into-imsrefresh_pattern -i \.wma 1440 90% 21600 reload-into-imsrefresh_pattern -i \.zip 1440 90% 21600 reload-into-imsrefresh_pattern -i \.mp3 1440 90% 21600 reload-into-imsrefresh_pattern -i \.rar 1440 90% 21600 reload-into-imsrefresh_pattern -i \.flv$ 1440 90% 21600 reload-into-imsrefresh_pattern -i \.wmv$ 1440 90% 21600 reload-into-imsrefresh_pattern -i \.exe$ 1440 90% 21600 reload-into-imsrefresh_pattern . 0 20% 4320acl manager proto cache_objectacl ownhost src 192.168.1.0/24acl localhost src 127.0.0.1/32acl to_localhost dst 127.0.0.0/8acl Safe_ports port 8080 # proxyacl Safe_ports port 80 # Webacl SSL_ports port 443 #httpsacl CONNECT method CONNECThttp_access allow ownhosthttp_access allow manager localhosthttp_access deny managerhttp_access deny !Safe_portshttp_access deny CONNECT !SSL_portshttp_access deny allicp_access allow all##############http-header###############################header安全配置reply_header_access Via deny allreply_header_access Cache-Control deny allreply_header_access Server deny allreply_header_access X-Squid-Error deny allreply_header_access X-Forwarded-For deny allrequest_header_access Via deny allrequest_header_access Age deny allrequest_header_access X-Squid-Error deny allrequest_header_access Pragma deny all#request_header_access X-Forwarded-For deny all