[Squid] 分享squid缓存服务器配置

分享下自己测试squid缓存节点配置文件,如果有不足之处请大家多提意见。
测试的版本已经完全支持http/1.1

squid版本:
Squid Cache: Version 3.1.5

http_port 80 vhost                     #squid监听端口,vhost表示根据请求主机头来转发到后端WEB机器
http_port 8080 vhost vport             #vport 虚拟主机的支持
icp_port 0                             #提供从相邻的squid查询端口,如果不提供该服务,可一将端口改为0
unique_hostname host100                 #防止cache主机名冲突
dns_nameservers 192.168.1.100        #指定内部DNS服务器

cache_replacement_policy heap LFUDA  #控制了squid的磁盘cache的置换策略(例如响应时间,命中率,字节命中率等),一般分为三类,我们只用了LFUDA
memory_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=204800

logformat  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 socket
logfile_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 MB
quick_abort_max 5 MB
quick_abort_pct 80
#控制squid是否继续传输被用户中断的请求,当用户中断请求时,squid把检测 quick_abort 的值。如果剩余部分小于“quick_abort_min”指定的值,squid 把继续完成剩余部分的传输;如果剩余部分大于“quick_abort_max”指定的值,squid 把终止剩余部分的传输;如果已完成“quick_abort_pct”指定的百分比,squid把继续完成剩余部分的传输。

#keepalived
client_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.1
acl Purge method PURGE
http_access allow mypurge  Purge
http_access deny Purge

#如下不缓存动态的内容
hierarchy_stoplist cgi-bin ?
hierarchy_stoplist -i ^https:\\ ?
acl QUERY urlpath_regex -i cgi-bin \? \.php \.xml \.jsp \.js \.do
acl 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 QUERY
no_cache deny denyssl
no_cache deny dy_cache
no_cache deny dy_page

acl www dstdomain .eqifa.net
always_direct allow www
http_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_modified
Response 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-ims
refresh_pattern -i \.html$ 15 90% 60 reload-into-ims
refresh_pattern -i \.htm$ 15 90% 600 reload-into-ims
refresh_pattern -i \.shtml$ 15 90% 600 reload-into-ims
refresh_pattern -i \.vhtml$ 30 90% 600 reload-into-ims
refresh_pattern -i \.hml$ 15 90% 600 reload-into-ims
refresh_pattern -i \.php$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.asp$ 15 90% 600 reload-into-ims
refresh_pattern -i \.jsp$ 1440 90% 8640 reload-into-ims
refresh_pattern -i \.gif$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.swf$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.jpg$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.png$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.bmp$ 1440 90% 129600 reload-into-ims
refresh_pattern -i \.js$ 120 90% 600 reload-into-ims
refresh_pattern -i \.css$ 120 90% 600 reload-into-ims
refresh_pattern -i \.wma 1440 90% 21600 reload-into-ims
refresh_pattern -i \.zip 1440 90% 21600 reload-into-ims
refresh_pattern -i \.mp3 1440 90% 21600 reload-into-ims
refresh_pattern -i \.rar 1440 90% 21600 reload-into-ims
refresh_pattern -i \.flv$ 1440 90% 21600 reload-into-ims
refresh_pattern -i \.wmv$ 1440 90% 21600 reload-into-ims
refresh_pattern -i \.exe$ 1440 90% 21600 reload-into-ims
refresh_pattern .               0       20%     4320

acl manager proto cache_object
acl ownhost src 192.168.1.0/24
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl Safe_ports port 8080    # proxy
acl Safe_ports port 80      # Web
acl SSL_ports port  443     #https
acl CONNECT method CONNECT

http_access allow ownhost
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny all
icp_access allow  all

##############http-header###############################

header安全配置
reply_header_access Via deny all
reply_header_access Cache-Control deny all
reply_header_access Server deny all
reply_header_access X-Squid-Error deny all
reply_header_access X-Forwarded-For deny all
request_header_access Via deny all
request_header_access Age deny all
request_header_access X-Squid-Error deny all
request_header_access Pragma deny all
#request_header_access X-Forwarded-For deny all

One thought on “[Squid] 分享squid缓存服务器配置

Leave a Reply