http_port 3128
#一般squid仅对80端口的HTTP服务加速。使用http_port指令让squid侦听在该端口:
http_port 80
假如想让squid既作cache代理,又作加速器,那么列出这2个端口,但是所有指定的端口都必须在一条命令行上:
http_port 80 http_port 3128
logfile_rotate 3
#周期性的滚动日志文件,以阻止它们变得太大。为了合理控制磁盘空间消耗,在cron里使用如下命令:
%squid -k rotate
例如,如下任务接口在每天的早上4点滚动日志:
0 4 * * * /usr/local/squid/sbin/squid -k rotate
工作过程:该命令做两件事。首先,它关闭当前打开的日志文件。然后,通过在文件名后加数字扩展名,它重命名cache.log,store.log,和access.log。例如,cache.log变成cache.log.0,cache.log.0变成cache.log.1,如此继续,滚动到logfile_rotate选项指定的值。
cache_mem 1024 MB
指定squid可以使用的内存理想值,建议设为内存的1/3.
#此参数并非指定进程的最大值,它只是设定一个squid能够用于多少额外的内存来缓存对象的限制值,squid在其他方面也需要使用内存。
read-only
read-only选项指示Squid继续从cache_dir读取文件,但不往里面写新目标。他在squid.conf文件里看起来如下:
cache_dir ufs /cache0 7000 16 256 read-only
如果你想把cache文件从一个磁盘迁移到另一个磁盘,那么可使用该选项。如果你简单的增加一个cache_dir,并且删除另一个,squid的命中率会显著下降。在旧目录是read-only时,你仍能从那里获取cache命中。在一段时间后,就能从设置文件里删除read-only缓存目录。
max-size
使用该选项,你能指定存储在cache目录里的最大目标大小。例如:
cache_dir ufs /cache0 7000 16 256 max-size=1048576
注意值是以字节为单位的。在大多数情况下,你不必增加该选项。如果你做了,请尽力将所有cache_dir行以max-size大小顺序来存放(从小到大)。
#cache_swap_low和cache_swap_high指令控制了存储在磁盘上的对象的置换。它们的值是最大cache体积的百分比,这个最大cache体积来自于所有cache_dir大小的总和。例如:
cache_swap_low 90
cache_swap_high 95
如果总共磁盘使用低于cache_swap_low,squid不会删除cache目标。如果cache体积增加,squid会逐渐删除目标。在稳定状态下,你发现磁盘使用总是相对接近cache_swap_low值。你可以通过请求cache管理器的storedir页面来查看当前磁盘使用状况
请注意,改变cache_swap_high也许不会对squid的磁盘使用有太大效果。在squid的早期版本里,该参数有重要作用;然而现在,它不是这样了。
如果不想squid缓存任何文件,如某些空间有限的专有系统,可以使用null文件系统(这样不需要哪些缓存策略)
Cache_dir null /tmp
cache_vary on (默认 on 表示可以缓存静态文件)
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
cache_replacement_policy heap GDSF
memory_replacement_policy heap GDSF
#cache的替换策略,对于小文件比较多的缓存服务器,采用GDSF容易获得比较好的命中
率,特别是内存命中率.
minimum_object_size 0 KB
maximum_object_size 6 MB
大于该值得对象将不被存储。如果要提高访问速度,就降低该值;如果想最大限度的节约带宽,降低成本,就增加该值。
maximum_object_size_in_memory 1024 KB
设置较小的maximum_object_size_in_memory值有助于有效控制squid过度占用内存
cache_dir aufs /opt/squid/cache 4000 16 32
cache_dir aufs /opt/squid/cachedir/cache01 4000 16 32
cache_log /opt/squid/var/logs/cache.log
#cache_dir指令是squid.conf配置文件里最重要的指令之一。它告诉squid以何种方式存储cache文件到磁盘的什么位置。cache_dir指令取如下参数:
#缓存目录的设置,可以设置多个缓存目录,语法为:<cache_dir> <aufs|ufs> <目录所在> <MBytes大小> <dir1> <dir2>
cache_dir aufs /opt/squid/cachedir/cache01 4000 16 32表示
其中4000该目录下使用的缓冲值为4000MB 16是cache01下子目录数量 32是cache01下子目录的下一级目录的数量
strip_query_terms off
#该指令是另一个隐私保护功能。在记录请求前,Squid删除了查询条件。假如日志文件不幸落入坏人之手,他们不会找到任何用户名和密码。当该指令激活时,在问号(?)之后的所有字节被删除。例如,某个URl如下:
http://auto.search.msn.com/response.asp?MT=www.kimo.com.yw&srch=3&prov=&utf8
会被记录为:
http://auto.search.msn.com/response.asp?
acl nolog urlpath_regex -i \.dll
emulate_httpd_log on
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh !nolog
#所有日志格式按照apache 标准格式输出,并且不记录nolog定义的访问日志 eg:192.168.19.212 - - [23/Oct/2008:00:00:24 +0800] "GET http://images.zhaopin.com/new4/images/nub/1.gif HTTP/1.0" 304 0 "http://www.zhaopin.com/beijing/?DYWE=1224581170741.435762.1224638441.1224644873.3" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)" TCP_IMS_HIT:NONE
要记录源IP地址:
logformat combined %{X-Forwarded-For1}>h %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
日志即为:82.145.157.175 192.168.10.114 - - [14/Dec/2009:09...
同理:
acl nolog urlpath_regex -i \.css \.js \.swf
cache_access_log /opt/squid/var/logs/access.log combined !nolog
access_log /opt/squid/var/logs/newaccess.log !nolog
上面记录的日志中就不包含 \.css \.js \.swf类型的访问日志
注:apache格式串变量的含义:
%...a: 远程IP地址
%...A: 本地IP地址
%...B: 已发送的字节数,不包含HTTP头
%...b: CLF格式的已发送字节数量,不包含HTTP头。例如当没有发送数据时,写入‘-’而不是0。
%...{FOOBAR}e: 环境变量FOOBAR的内容
%...f: 文件名字
%...h: 远程主机
%...H 请求的协议
%...{Foobar}i: Foobar的内容,发送给服务器的请求的标头行。
%...l: 远程登录名字(来自identd,如提供的话)
%...m 请求的方法
%...{Foobar}n: 来自另外一个模块的注解“Foobar”的内容
%...{Foobar}o: Foobar的内容,应答的标头行
%...p: 服务器响应请求时使用的端口
%...P: 响应请求的子进程ID。
%...q 查询字符串(如果存在查询字符串,则包含“?”后面的部分;否则,它是一个空字符串。)
%...r: 请求的第一行
%...s: 状态。对于进行内部重定向的请求,这是指*原来*请求 的状态。如果用%...s,则是指后来的请求。
%...t: 以公共日志时间格式表示的时间(或称为标准英文格式)
%...{format}t: 以指定格式format表示的时间
%...T: 为响应请求而耗费的时间,以秒计
%...u: 远程用户(来自auth;如果返回状态(%s)是401则可能是伪造的)
%...U: 用户所请求的URL路径
%...v: 响应请求的服务器的ServerName
%...V: 依照UseCanonicalName设置得到的服务器名字
cache_store_log none
#跟其他日志文件一样,Squid将最新的日志条目写到该文件的末尾。某个给定的URI可能出现在日志文件里多次。例如,它先被cache,然后删除,接着又cache住。仅仅最近来的日志条目才反映目标的当前值。
Log_fqdn:如Client有domain name的话,access.log便会把domain name完整的记录下来。否则只记录IP地址,由于开启之后,squid需要访问DNS来解析客户的域名,会加重服务器负载,导致性能下降。
ftp_user:假如需要使用 anonymous ftp来获取档案,会送出后面所接的字串当 password。
Dns_children: Squid本身附有一个dnsserver程序来处理Client端domain name的需求,一般来说,当proxy有较大的使用量时,dns children设定较多可以处理的domain name request较多也较快,但当设定过多的dnsserver对系统的performance也会有相当的影响,可使用cache manger来观看每个dnsserver的使用量决定数量的多少。
reference_age:物件的LRU,若比值大的话便清除cache中的物件。例如设定一星期,如一星期内没有存取动作,就把物件从cache中移出,假如值为零的话,物件会存放于cache中直到cache swap上限。
Read_time:当proxy与web连接后,经过read_time的时间接收不到web站传送资料便断线,有可能是remote server或是网络连接突然性的中断等因素。
Shutdown_lifetime:当cache server收到SIGTERM或是SIGHUP时,squid会对使用端发出"shutdown pending"讯息,并关掉所有正在进行中的动作,直到squid重新启动。
Err_html_text:使用者浏览网页中,常常遇到不存在或连线中断的网站,squid本身会回应一个error message至用户端,squid管理者可使用这个参数来改变回应至用户端的error message,来连接至管理者的homepage。
Deny_html_text:若遇到access control fail的情况,回应一个access fail message,squid本身提供一个简单的message,可利用此功能连接至homepage。
ipcache_size 1024
# ip对应cache的大小为1024
ipcache_low 95
ipcache_high 95
fqdncache_size 1024 域名全称cache的大小为1024(默认1024)
#禁止缓存
hierarchy_stoplist cgi-bin ?
hierarchy_stoplist -i ^https:\\ ?
acl QUERY urlpath_regex -i cgi-bin \? \.asp \.php \.jsp \.cgi
acl denyssl urlpath_regex -i ^https:\\
no_cache deny QUERY
no_cache deny denyssl
#上面几个就是说遇到URL中有包含cgi-bin和以https:\\开头的都不要缓存,
#还有asp、cgi、php等动态脚本也不要缓存,
#因为这些脚本通常都是动态更新的,这样数据不同步。
#还有https://开通的不缓存是因为一般我们进行电子商务交易,
#例如银行付款等都是采用这个的,如果把信用卡号什么缓存那不是很危险。
例子:
acl Local dst 10.0.1.0/24
cache deny Local
目的地址为10.1.1.1---255所有地址的文件不写入缓存
acl HTML url_regex .html$
cache deny HTML
拒绝将后缀名为HTML的写入缓存
acl XYZZY url_regex ^http://www.i.suck.com/foo.html$
cache deny XYZZY
拒绝某个网站的缓存
acl Morning time 08:00-11:00
cache deny Morning
上午八点至十一点拒绝写入缓存
ACL的基本格式如下: acl<acl> <acl名称> <acl类型> <配置的内容>
或:acl 列表名称 控制方式 控制目标
Eg:列表ip地址从192.168.0.2到192.168.0.10的所有计算机
Acl advance 192.168.0.2-192.168.0.20/32
*需要注意的是:squid将使用allow-deny-allow-deny…..这样的顺序套用规则
例如,当一个用户访问代理服务器时,squid会顺序测试squid中定义的所有规则都不匹配时,squid会使用与最后一条相反的规则
acl cache_object urlpath_regex -i \.jpg$ \.png$ \.htm \.html \.gif$ \.swf$
no_cache deny !cache_object (不缓存以上未定义到格式的文件)
acl bmsDomain dstdomain .test.com
no_cache deny bmsDomain(不缓存.test.com下的所有文件)
不缓存200,404等错误页面
acl badhttp http_status 200 301 500- 400-403
http_access deny badhttp
匹配包含数字的用户名
acl NumberInNname ident_regex [0-9]
允许对代理认证用户名使用正则表达式
acl Admins proxy_auth_regex -i ^admin
想要查看mgr信息,例如mgr:info等,请先加上一下语句
acl localhost src 127.0.0.1/255.255.255.255
acl Manager proto cache_object
http_access allow Manager localhost
想手动强行刷新:
acl localhost src 127.0.0.1/255.255.255.255
acl Purge method PURGE
http_access allow Purge localhost
dns_children 120
refresh_pattern的作用:
refresh_pattern指令间接的控制磁盘缓存。它帮助squid决定,是否某个给定请求是cache命中,或作为cache丢失对待。宽松的设置增加了你的cache命中率,但也增加了用户接收过时响应的机会。另一方面,保守的设置,降低了cache命中率和过时响应。
refresh_pattern规则仅仅应用到没有明确过时期限的响应。原始服务器能使用Expires头部,或者Cache-Control:max-age指令来指定过时期限。
refresh_pattern语法如下:
refresh_pattern [-i] regexp min percent max [options]
例如:
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
refresh_pattern -i \.gif$ 180 90% 1440 reload-into-ims ignore-no-cache
refresh_pattern -i \.jpg$ 180 90% 1440 reload-into-ims ignore-no-cache
refresh_pattern -i \.wmv$ 1440 90% 2880 reload-into-ims ignore-no-cache
refresh_pattern -i http://xxx/jobs_nv/ajax_keywords.asp 1440 50% 10080 override-expire override-lastmod reload-into-ims ignore-reload ignore-no-cache ignore-private(缓存动态文件,可以做到,但是个人认为没意义)
############################################################################################
开始时的编译安装:
./configure \
--prefix=/opt/squid \ 指定软件安装路径
--enable-delay-pools \ 支持流量控制
--enable-async-io=120 \ 这个主要是设置async模式来运行squid,我的理解是设置用线程来运行squid,
如果服务器配置很不错,有1G以上内存,cpu使用SMP的方式的话可以考虑设成
160或者更高。如果服务器比较糟糕就根据实际情况设了。另外此项还另cache
文件支持aufs
--enable-auth=="basic"
--enable-basic-auth-helpers="NCSA"
以上两个是编译用户认证模块。
--enable-storeio=aufs,coss,diskd,ufs \让squid支持这些文件系统
--enable-useragent-log \ 允许解析的URL中出现下划先,因为默认squid会认为带下划线的URL地址是非法
的,并拒绝访问该地址
--enable-referer-log \该选项激活来自客户请求的HTTP referer 日志
--enable-kill-parent-hack \ 关掉suqid的时候,要不要连同父进程一起关掉
--enable-forward-log \
--enable-snmp \ 此选项可以让MRTG使用SNMP协议对服务器的流量状态进行监测,因此必须
选择此项,使Squid支持SNMP接口
--enable-cache-digests \ 加快请求时,检索缓存内容的速度。
--enable-default-err-language=Simplify_Chinese \ 指定出错是显示的错误页面为简体中文
--enable-epoll \ 可以提升效能。squid是单进程多路复用的,epoll的效率比select好得多.
--enable-removal-policies=heap,lru \ 可以使用GDSF或LFUDA策略。对小文件,使用GDSF的cache选
择算法比默认的lru算法效率要高
--enable-large-cache-files \
--disable-internal-dns \ squid 源代码包含两个不同的DNS 解决方案,叫做“内部的”和“外部的”。
内部查询是默认的,但某些人可能要使用外部技术。该选项禁止内部功能,转
向使用旧的方式。该工具的有利处之一是,squid获得准确无误的DNS响应的
TTLs。
--enable-x-accelerator-vary \该高级功能可能在squid被配置成加速器时使用。它建议squid在响应请求
时,从后台原始服务器中寻找X-Accelerator-Vary头。
--enable-follow-x-forwarded-for \
--with-large-files \
--disable-ident-lookups \ 防止系统使用RFC931规定的身份识别方法
--enable-underscore \ 允许请求的URL出现下划线
--disable-arp-acl \ 可以在规则设置中直接通过客户端的MAC地址进行管理,防止客户使用IP欺骗。
--enable-ssl \使用该选项赋予squid 终止SSL/TLS 连接的能力。注意这仅仅工作在web加速器中用以加速
请求
--with-filedescriptors=65535(3.0中设置文件描述符大小。2.6用with-maxfd)
--enable-auth=basic
--enable-basic-auth-helpers=NCSA 需要做用户认证时添加
--enable-delay-pools 限制流量,带宽时添加
--enable-linux-netfilter
--enable-linux-tproxy
以上两条是可以支持透明代理
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zynong/archive/2010/03/01/5334788.aspx