准备 1.可以用下述命令获得squid
wget http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE13.tar.gz
2.建立squid用户
useradd squid -M -c "Squid user" -d /dev/null -s /sbin/nologin
3.配置参数详解
--prefix=/usr/local/squid3 :
指定squid日志,二进制文件和配置文件的默认位置,squid会将var目录也放在这下面,在这个目录下面会有日志文件,日志文件通常会很大,因此建议将其放在较大的磁盘下面,你可以使用 ―localstatedir 选项。
--localstatedir=/bigdisk/var
指定var目录的安装位置
--enable-dlmalloc[=LIB]
在一些系统上,内建的内存分配机制(malloc)在使用squid时表现不尽人意。使用--enable-dlmalloc选项将squid源代码包中 的dlmalloc包编译和链接进来。假如你的系统中已安装dlmalloc,你能使用=LIB参数指定库的路径。请 http://g.oswego.edu/dl/html/malloc.html更多关于dlmalloc的信息。
--enable-gnuregex
在访问控制列表和其他配置指令里,squid使用正则表达 式作为匹配机制。GNU的正则表达式库包含在squid的源代码包里;它可以在没有内建正则表达式的操作系统中使用。./configure脚本侦察你系 统中的正则表达式库,假如必要,它可以激活使用GNU正则表达式。如果因为某些理由,你想强制使用GNU正则表达式,你可以将这个选项加 到./configure命令后。
--enable-async-io[=N_THREADS]
异步I/O是squid技术之一,用以提升存储性能。aufs模块使用大量的线程来执行磁盘I/O操作。该代码仅仅工作在linux和solaris系统 中。=N_THREADS参数改变squid使用的线程数量。aufs 在多cup 系统上优势更为明显,设置的线程数量不要过多。squid默认根据缓存目录的数量,自动计算需要使用多少线程。
--enable-removal-policies='heap,lru'
排除策略是squid需要腾出空间给新的cache目标时,用以排除旧目标的机制。squid-2.5支持3个排除策略:最少近期使用(LRU),贪婪对偶大小(GDS),最少经常使用(LFU)。。LRU是默认的,它以双链表数据结构执行。
--enable-delay-pools
延时池是squid用于传输形状或带宽限制的技术。该池由大量的客户端IP地址组成。当来自这些客户端的请求处于cache丢失状态,他们的响应可能被人工延迟。
--enable-snmp
简单网络管理协议(SNMP)是监视网络设备和服务器的流行方法。该选项导致编译过程去编译所有的SNMP相关的代码,包括一个裁切版本的CMU SNMP库。
--enable-cachemgr -hostname[=hostname]
cachemgr是一个CGI程序,你能使用它来管理查询squid。默认cachemgr的hostname值是空的,但你能使用该选项来指定一个默认值
--enable-htcp
HTCP是超文本缓存协议--类似于ICP的内部缓存协议。
--enable-ssl
使用该选项赋予squid终止SSL/TLS连接的能力。注意这仅仅工作在web加速器中用以加速请求。
--with-openssl[=DIR]
假如必要,你使用该选项来告诉squid到哪里找到OpenSSL库或头文件。假如它们不在默认位置,在该选项后指定它们的父路径。例如:
% ./configure --enable-ssl --with-ssl=/opt/foo/openssl
在这个例子中,你的编译器将在/opt/foo/openssl/include目录中找头文件,在/opt/foo/openssl/lib中找库文件。
--enable-cache-digests
Cache消化是ICP的另一个替代,但有着截然不同的特性。
--enable-err-languages="Simplify_Chinese"
--enable-default-err-languages="Simplify_Chinese"
上面两个选项告诉Squid编入并使用简体中文错误信息。
squid支持定制错误消息,错误消息可以用多种语言报告。该选项指定复制到安装目录($prefix/share/errors)的语言。假如你不使用 该选项,所有可用语言被安装。想知道何种语言可用,请见源代码包里errors目录下的目录列表。
安装tar -zxvf squid-3.0.STABLE13.tar.gzcd squid-3.0.STABLE13./configure --prefix=/usr/local/squid3 --enable-dlmalloc --enable-gnuregex --enable-async-io --enable-removal-policies='heap,lru' --enable-delay-pools --disable-snmp --enable-storeio='ufs,aufs,null' --disable-wccp --enable-kill-parent-hack --disable-select --enable-auth=basic --with-aio --disable-ident-lookup --with-filedescriptors=65536 --enable-err-languages="Simplify_Chinese" --enable-default-err-languages="Simplify_Chinese"makemake install
配置(仅供参考) http_port 80 accel vhost vport
#选项 http_port 指定squid监听HTTP请求的端口,一般都设置成80端口,这样使用户感觉不到反向代理的存在,就像访问真正 的WEB服务器一样。设定squid为accel加速模式,vhost必须要加.否则将无法将主机头转发至后端服务器,访问时就会出现无法找到主机头的错 误
cache_peer 192.168.0.10 parent 80 0 no-query round-robin max-conn=32 originserver name=img
cache_peer_domain img img.xxx.com
# squid2.5以上都是用的cache_peer来指定所需要代理的服务器的IP 这一点很重要! 由于本例squid 与web 不在同一服务器,因此需要cache_peer 指定相应WEB服务器IP #acl
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 8080
acl LanDstDM dstdomain . yourdomain.com
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports http_access deny all
#base
visible_hostname img-cache.xxx.cn
#设定squid的主机名,如无此项squid将无法启动
cache_mgr cache@xxx.org
cache_effective_user squid
cache_effective_group squid error_directory /usr/local/squid3/share/errors/Simplify_Chinese
icon_directory /usr/local/squid3/share/icons
mime_table /usr/local/squid3/etc/mime.conf
cache_replacement_policy lru
#cache_dir
cache_dir ufs /var/tmp 10000 16 256
#100G其中1层目录16个 并且每个1层目录下又有256个2层目录[或者说子目录]
#磁盘缓存的类型和目录,大小,一二级目录的设置,这里磁盘缓存大小是10G
ufs是一种文件存储方式 因为os一般都是从内存获取数据 那么内存的东西必须最后写的硬盘上~
sync 同步的时候用的ufs 那么squid也是一样
ufs一般是同时写入内存和硬盘
注意:size是按照M为单位的也就这个目录中最大存储容量的上限 cache_mem 2048 MB
#共享内存大小(squid在提供服务的时候所使用的内存)
max_open_disk_fds 0
maximum_object_size 512 KB
maximum_object_size_in_memory 256 KB
#最大内存缓存OBJECT值~如果超过则不再内存中缓存~而存入IO中!
#keepalived
client_persistent_connections off
server_persistent_connections on
#persistent_request_timeout 60 seconds
memory_pools on
memory_pools_limit 64 MB
forwarded_for on
log_icp_queries off
via on
httpd_suppress_version_string off
ie_refresh off
tcp_recv_bufsize 32 KB
#acl webservices rep_header Server -i ^Apache ^nginx
#broken_vary_encoding allow webservices
#hidden the squid header
#reply_header_access Server deny all
#reply_header_access X-Cache deny all
#reply_header_access Warning deny all
#reply_header_access Expires deny all
#reply_header_access Cache-Control deny all
#reply_header_access age deny all
#reply_header_access All deny all
ipcache_size 1024
ipcache_low 90
ipcache_high 95 memory_replacement_policy lru
#替换机制 (lru叫做 最近不常用的单元 unit一般就是常说的object 也就是当cache中的内容比如内存或硬盘达到上限时的 那么就需要进行数据的换进和换出工作
hosts_file /etc/hosts
request_header_max_size 128 KB
#deny cache
hierarchy_stoplist cgi-bin ? \.php
acl QUERY urlpath_regex cgi-bin\? \.php \.css
acl DIRECT url_regex -i ^http:\/\/www\.yourdomain\.org\/$
acl DIRECT url_regex -i ^http:\/\/photo\.yourdomain \.org\/.*$
acl DIRECT url_regex -i ^http:\/\/www\.yourdomain \.org\/index\.html$
cache deny QUERY
cache deny DIRECT
#request_body_max_size 0 KB
refresh_pattern ^ftp: 60 20% 10080
refresh_pattern ^gopher: 60 0% 1440
refresh_pattern . 0 20% 1440
#refresh_pattern -i \.css$ 360 50% 2880 reload-into-ims
refresh_pattern -i \.js$ 1440 50% 2880 reload-into-ims
refresh_pattern -i \.html$ 720 50% 1440 reload-into-ims
refresh_pattern -i \.jpg$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.gif$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.swf$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.jpg$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.png$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.bmp$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.doc$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.ppt$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.xls$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.pdf$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.rar$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.zip$ 1440 50% 2880 ignore-reload
refresh_pattern -i \.txt$ 1440 50% 2880 ignore-reload
quick_abort_min 20 KB
quick_abort_max 20 KB
quick_abort_pct 95
connect_timeout 1 minute
negative_ttl 0 minutes
read_timeout 30 seconds
pconn_timeout 120 seconds
shutdown_lifetime 5 seconds
strip_query_terms off
# snmp
#snmp_port 3401
#acl snmppublic snmp_orgmunity snsimg
#snmp_access allow snmppublic localhost
#snmp_access deny all
acl snmppublic snmp_orgmunity public
snmp_port 3401
snmp_access allow snmppublic all
icp_port 0 # logfile
emulate_httpd_log on
logformat orgbined %{X-Forwarded-For}>h %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh
#设置access_log中日志存储的格式 access_log /usr/local/squid3/var/logs/access.log squid
#access_log为客户端请求的日志 cache_log /usr/local/squid3/var/logs/cache.log #为squid自身的运行日志
pid_filename /usr/local/squid3/var/logs/squid.pid #此三项是设置PID和日志文件位置
cache_store_log none 不记录store.log
logfile_rotate 12
# MISCELLANEOUS
store_objects_per_bucket 15
client_db off
其他设置
在这里我所以的日志都记录在:/usr/local/squid3/var/logs里
给目录相应的权限
chmod -R 777 /usr/local/squid3/var/
chmod -R 777 /usr/local/squid3/var/logs/
测试/usr/local/squid2/sbin/squid -z
Create swap directories 是创建SWAP目录的! 也就是cache_dir 中的目录
启动squid
/usr/local/squid3/sbin/squid -Nd1
ps aux |grep squid 查看是否启动
squid 常用命令
Squid安装设试命令:
1,初始化你在 squid.conf 里配置的 cache 目录
#/usr/local/squid/sbin/squid -z //初始化缓存空间
如果有错误提示,请检查你的 cache目录的权限。
2,对你的squid.conf 排错,即验证 squid.conf 的 语法和配置。
#/usr/local/squid/sbin/squid -k parse
如果squid.conf 有语法或配置错误,这里会返回提示你,如果没有返回,恭喜,可以尝试启动squid。
3,在前台启动squid,并输出启动过程。
#/usr/local/squid/sbin/squid -N -d1
如果有到 ready to server reques,恭喜,启动成功。
然后 ctrl + c,停止squid,并以后台运行的方式启动它。
4,启动squid在后台运行。
#/usr/local/squid/sbin/squid -s
这时候可以 ps -A 来查看系统进程,可以看到俩个 squid 进程。
5,停止 squid
#/usr/local/squid/sbin/squid -k shutdown
这个不用解释吧。
6,重引导修改过的 squid.conf
#/usr/local/squid/sbin/squid -k reconfigure //载入新的配置文件
这个估计用的时候比较多,当你发现你的配置有不尽你意的时候,可以随时修改squid.conf,然后别忘记对你的 squid.conf排错,然后再执行此指令,即可让squid重新按照你的 squid.conf 来运行。
7./usr/local/squid/sbin/squid -k rotate 轮循日志
8,把squid添加到系统启动项
编辑 /etc/rc.d/rc.local
添加如下行: /usr/local/squid/sbin/squid -s
利用Runc脚本........
再来点其他的。
1,修改cache 缓存目录的权限。
#chown -R squid:squid /data/cache
我的cache缓存目录是 /data/cache,squid执行用户和用户组是 squid,squid。
2,修改squid 日志目录的权限
#chown -R squid:squid /usr/local/squid/var/logs
这一步并不是适合每一个使用squid的用户.意为让squid有权限在该目录进行写操作 。
例如生成 access.log cache.log store.log
3,查看你的日志文档。
#more /usr/local/squid/var/logs/access.log | grep TCP_MEM_HIT
该指令可以看到在squid运行过程中,有那些文件被squid缓存到内存中,并返回给访问用户。
#more /usr/local/squid/var/logs/access.log | grep TCP_HIT
该指令可以看到在squid运行过程中,有那些文件被squid缓存到cache目录中,并返回给访问用户。
#more /usr/local/squid/var/logs/access.log | grep TCP_MISS
该指令可以看到在squid运行过程中,有那些文件没有被squid缓存,而是现重原始服务器获取并返回给访问用户。
关于 TCP_XXXX 等参数及代表的信息,请参看《squid中文权威指南》13.2.1 章节。
当然,本例中的蓝色文字是可以修改为其他的参数,例如你的域名 www.xxxx.com ,同样可以看到access.log里关于该域名的行。
二.squid命中率分析squid/bin/squidclient -p 80 mgr:info
squid/bin/squidclient -p 80 mgr:5min
可以看到详细的性能情况,其中PORT是你的proxy的端口,5min可以是60min
取得squid运行状态信息: squidclient -p 80 mgr:info
*取得squid内存使用情况: squidclient -p 80 mgr:mem
*取得squid已经缓存的列表: squidclient -p 80 mgrbjects. use it carefully,it may crash
*取得squid的磁盘使用情况: squidclient -p 80 mgr:diskd
*强制更新某个url:squidclient -p 80 -m PURGE http://www.yejr.com/static.php
*更多的请查看:squidclient-h 或者 squidclient -p 80 mgr:
查命中率:
/usr/local/squid/bin/squidclient -h111.222.111.111 -p80 mgr:info
/usr/local/squid/bin/squidclient -h具体的IP -p80 mgr:info
参考资料http://blog.verycd.com/dash/cmd=showentry&eid=10840http://liuyu.blog.51cto.com/183345/66507
http://bbs.linuxtone.org/viewthread.php?tid=1442&extra=page%3D1%26amp%3Bfilter%3Dtype%26amp%3Btypeid%3D10http://bbs.linuxtone.org/viewthread.php?tid=1114&extra=page%3D1%26amp%3Bfilter%3Dtype%26amp%3Btypeid%3D10http://wiki.ubuntu.org.cn/Squid%E9%85%8D%E7%BD%AE%E8%AF%A6%E8%A7%A3
http://blog.s135.com/book/squid/chap03.html#a0
http://blog.s135.com/book/squid/chap04.html
http://bbs.linuxtone.org/thread-137-1-1.html
http://bbs.chinaunix.net/viewthread.php?tid=1349363
http://bbs.chinaunix.net/viewthread.php?tid=1377948
http://hi.baidu.com/%CB%DE%D2%BB%D2%BB/blog/item/02e59962828e446a0d33fac7.html
http://www.hiadmin.com/squid-30-manual/