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 %&gt;a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}&gt;h" %Ss:%Sh !nolog

#所有日志格式按照apache 标准格式输出,并且不记录nolog定义的访问日志 eg:192.168.19.212 - - [23/Oct/2008:00:00:24 +0800] "GET http://p_w_picpaths.zhaopin.com/new4/p_w_picpaths/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}&gt;h %&gt;a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}&gt;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