squid squid正向代理服务器为什么连gif都是miss

&&&&&&&&&&&&&&&&&&
posts - 49,comments - 54,trackbacks - 0
代理服务器OS:CentOS release 6.2 (x86_64)
代理服务器IP:xxx.xxx.xxx.xxx
安装squid:yum install squid.x86_64
修改配置文件:(精简)vi /etc/squid/squid.conf修改:http_access deny all -& http_access allow all添加:cache_mem 80 MB打开:cache_dir ufs /var/spool/squid 100 16 256
初始化:&shell&squid -z
重启:&&shell&service squid restart
正向代理默认端口: 3128
测试(局域网内其他机器):shell&wget -e "http_proxy=xxx.xxx.xxx.xxx:3128"
阅读(...) 评论()1738人阅读
首先是下载安装squid,squid的官网下载地址页面是http://www.squid-cache.org/Versions/,我安装的是3.5.19 stable,此处不赘述,无非是configure、make、make install等
下文参考:
/ubuntu-linux/squid-bianyi-anzhuang-canshu.html
http://linuxme./960
/art/129.htm
http://blog.csdn.net/gengoo/article/details/5158238
http://blog.csdn.net/chinalinuxzend/article/details/1784465
http://bbs.linuxtone.org/forum.php?mod=viewthread&tid=15681
.cn/s/blog_4b427acf01019cer.html
http://blog.chinaunix.net/uid--id-1565371.html
http://www.jb51.net/article/17794.htm
/content/14/378.shtml
编译安装命令
转载自:/ubuntu-linux/squid-bianyi-anzhuang-canshu.html
Squid编译安装命令如下:
./configure --prefix=/usr/local/squid \
--enable-gnuregex \
--disable-carp \
--enable-async-io=240 \
--with-pthreads \
--enable-storeio=ufs,aufs,diskd \
--disable-wccp \
--enable-icmp \
--enable-kill-parent-hack \
--enable-cachemgr-hostname=localhost \
--enable-default-err-language=Simplify_Chinese \
--with-maxfd=65535 \
--enable-poll \
--enable-linux-netfilter \
--enable-large-cache-files \
--disable-ident-lookups \
--enable-default-hostsfile=/etc/hosts \
--with-dl \
--with-large-files \
--enable-delay-pools \
--enable-snmp \
--disable-internal-dns \
--enable-underscore\
--enable-arp-acl
Squid编译安装参数说明
--prefix=/usr/local/squid :指定软件的安装路径--enable-gnuregex :支持GNU正则表达式。--disable-carp:Cache数组路由协议(CARP)用来转发丢失的cache到父cache的数组或cluste--enable-async-io=240等同于同时打开./configure如下三个选项--with-aufs-threads=N_THREADS--with-pthreads--enable-storeio=ufs,aufs这个主要是设置async模式来运行squid,我的理解是设置用线程来运行squid,如果服务器配置很不错,有1G以上内存,cpu使用SMP的方式的话可以考虑设成160或者更高。如果服务器比较糟糕就根据实际情况设了。另外此项还另cache文件支持aufs--disable-wccp用于阻止或分发HTTP请求到一个或多个caches--enable-icmp :加入icmp支持--enable-kill-parent-hack :关掉suqid的时候,要不要连同父进程一起关掉--enable-cachemgr-hostname=localhost:指定cachemgr-hostname值为localhost--enable-snmp:此选项可以让MRTG使用SNMP协议对服务器的流量状态进行监测,因此必须选择此项,使Squid支持SNMP接口。--disable-ident-lookups :防止系统使用RFC931规定的身份识别方法。--enable-delay-pools 开启squid延时池功能--enable-cahce-digests :加快请求时,检索缓存内容的速度。--enable-err-language=”Simplify_Chinese” 和--enable-default-err-languages=”Simplify_Chinese”:指定出错是显示的错误页面为简体中文--with-maxfd=65535指定最大文件描述--enable-poll :指定使用Poll()函数,提升性能就是啦。--disable-ident-lookups允许服务器利用客户端的特殊TCP连接来发现用户名--enable-linux-netfilter :可以支持透明代理--enable-large-cache-files开启大文件支持,支持2GB以上的文件--disable-internal-dns使用自己的内部DNS查询--enable-underscore:允许解析的URL中出现下划线,因为默认squid会认为带下划线的URL地址是非法的,并拒绝访问该地址--enable-arp-acl :可以在规则设置中直接通过客户端的MAC地址进行管理,防止客户使用IP欺骗。
我采用的编译命令是
./configure --prefix=/Data/local/squid-3.5.19 --enable-gnuregex --enable-async-io=240 --enable-cahce-digests --enable-poll --enable-underscore --with-included-ltdl
squid的初始配置
我安装在/Data/local/squid-3.5.19目录下
主程序:/Data/local/squid-3.5.19/sbin/squid
配置目录:/Data/local/squid-3.5.19/etc
主配置文件:/Data/local/squid-3.5.19/etc/squid.conf
默认监听tcp端口号:3128
默认访问日志文件:/Data/local/squid-3.5.19/var/logs/access.log
常用配置选项
http_port 3128 (还可以只监听一个一个ip& http_port 192.168.0.1:3128)
cache_mem 64MB&&&&&&&& #缓存占内存大小
maximum_object_size 4096KB&&&&&&&&&&& #最大缓存块
reply_body_max_size& 1024000 allow all& #限定下载文件大小
access_log /var/log/squid/access.log&& #访问日志存放的文件
visible_hostname& proxy.test.xom& #可见的主机名
cache_dir ufs /var/spool/squid 100 16 256
&& &&& &usf:缓存数据的存储格式
&& &&& &/var/spool/squid:缓存目录
&& &&& &100:缓存目录占磁盘空间大小(M)
&& &&& &16:缓存空间一级子目录个数
&& &&& &256:缓存空间二级子目录个数
cache_mgr& && #定义管理员邮箱
http_access deny all&& #访问控制
chown -R nobody:nobody /Data/local/squid-3.5.19/var
/Data/local/squid-3.5.19/sbin/squid -z
/Data/local/squid-3.5.19/sbin/squid -NCd1
一些命令:
根据配置文件建立/重建缓存目录和缓存
squid -k parse
测试配置是否正确
squid -k kill
squid -k restart
squid访问控制
作为代理服务器,必须控制对其的访问权限,决定哪些请求能通行,squid支持在配置文件中配置访问控制
使用访问控制特性,可以控制在访问时根据特定的时间间隔进行缓存、访问特定站点或一组站点等等。 Squid 访问控制有两个要素:ACL 元素和 访问列表。访问列表可以允许或拒绝某些用户对此服务的访问。
下面的访问控制规则全篇转载自:http://blog.csdn.net/gengoo/article/details/5158238
访问控制元素
ACL元素是Squid的访问控制的基础。基本的ACL元素语法如下:
acl name type value1 value2 ...
acl Workstations src 10.0.0.0/16
&&& acl Http_ports port 80
基本的ACL类型
使用对象:src,dst,myip
&&& squid在ACL里指定IP地址时,能以子网,地址范围,域名等形式编写地址。假如你忽略掩码,squid会自动计算相应的掩码。如下: acl Foo src 127.0.0.1/32,通过指定地址范围做到列举多个相邻子网。例如:
acl Bar src 172.16.10.0-172.16.19.0/24.
&&& 注意使用IP地址范围,掩码只能取一个。也能在IP ACL里指定主机名,启动时,将主机名转换成IP地址。(一旦启动,squid不会对主机名的地址发起第二次DNS查询。这样,假如在squid运行中地址已改变,squid不会注意到)。
假如主机名被解析成多个IP地址,squid将每一个增加到ACL里。注意你也可以对主机名使用网络掩码。
ACL主机名转换到IP地址的过程会延缓squid的启动。除非绝对必要,请在src,dst,和myip
ACL里避免使用主机名。
squid以一种叫做splay tree的数据结构在内存里存储IP地址ACL。splay
tree有自我调整的特性,其中之一是在查询发生时,列表会自动纠正它自己的位置。当某个匹配元素在列表里发现时,该元素变成新的树根。在该方法中,最近参考的条目会移动到树的顶部,这减少了将来查询的时间。
属于同一ACL元素的所有的子网和范围不能重迭。例如,如下不被允许:
&&&&&&& acl Foo src 1.2.3.0/24
&&&&&&& acl Foo src 1.2.3.4/32
它导致squid在cache.log里打印警告:
使用对象:srcdomain,dstdomain,和cache_host_domain指令
当ACL域名以&.&开头,squid将它作为通配符,相反,如果ACL域名不以&.&开头,squid使用精确的字符串比较。squid使用splay tree的数据结构来存储域名ACL.
使用对象:ident,proxy_auth
用户名必须被严格匹配。squid也有相关的ACL对用户名使用正则表达式匹配(ident_regex和proxy_auth_regex)。你可以使用单词&REQUIRED&作为特殊值去匹配任意用户名。
正则表达式
使用对象:srcdom_regex, dstdom_regex, url_regex, urlpath_regex, browser, referer_regex, ident_regex, proxy_auth_regex, req_mime_type, rep_mime_type
大量的ACL使用正则表达式来匹配字符串。最常使用的正则表达式功能用以匹配字符串的开头或结尾。例如,^字符匹配行或字符串的开头,$是匹配行或字符串的结尾,.字符是匹配任意单个字符的通配符,对所有的squid正则表达式类,匹配是默认大小写敏感的。为了大小写不敏感,在ACL类型后面使用-i选项。
使用对象:port,myport
该类型是相对的,值是个别的端口号或端口范围。如下示例:
&&&&&&& acl Foo port 123
&&&&&&& acl Bar port 1-1024
自主系统号
使用对象:src_as,dst_as
Internet路由器使用自主系统(AS)号来创建路由表。基本上,某个AS号指向被同一组织管理的IP网络范围。例如,我的ISP分配了如下网络块:134.116.0.0/16,
137.41.0.0/16, 206.168.0.0/16,和其他更多。在Internet路由表里,这些网络被公布为属于AS 3404。当路由器转发包时,它们典型的选择经过最少AS的路径。AS基础的ACL仅仅被网络gurus使用。
使用IP地址来控制客户允许或不允许访问Squid。src类型指客户源IP地址。
acl MyNetwork src 192.168.0.0 10.0.1.0/24 10.0.5.0/24 172.16.0.0/12
dst类型指向原始服务器(目标)IP地址。在某些情况下,能使用该类型来阻止用户访问特定web站点。然而,在使用dst
ACL时须谨慎。大部分squid接受到的请求有原始服务器主机名.
请注意,为了避免延时,该尽可能的使用dstdomain ACL类型来代替dst, dst ACL存在的问题是,你试图允许或拒绝访问的原始服务器可能会改变它的IP地址。假如你不关心这样的改变,那就不必麻烦去升级squid.conf。你可以在acl行里放上主机名,但那样会延缓启动速度。假如你的ACL需要许多主机名,你也许该预处理配置文件,将主机名转换成IP地址。
myip类型指Squid的IP地址,它被客户连接。所以该ACL元素仅仅当系统有多个IP地址时才有用。
请注意,使用该机制你必须特别小心,阻止来自某个子网的用户连接squid位于另一子网的IP地址。否则,在会计和市场子网的聪明的用户,能够通过技术部子网进行连接,从而绕过你的限制。
使用它们去阻塞对某些站点的访问,去控制squid如何转发请求,以及让某些响应不可缓存,如下两行的不同:
&&&&&&& acl A dst www.squid-cache.org
&& &&&& acl B dstdomain www.squid-cache.org
A实际上是IP地址ACL,假如在squid运行时IP地址改变了,squid会继续使用旧的地址。然而dstdomain
ACL以域名形式存储,并非IP地址。当squid检查ACL B时,它对URL的主机名部分使用字符串比较功能,它并不真正关心是否www.squid-cache.org的IP地址改变了。
使用dstdomain ACL的主要问题是某些URL使用IP地址代替主机名。
srcdomain要求对每个客户IP地址进行所谓的反向DNS查询。使用dst
ACL,FQDN查询会导致延时。请求会被延缓处理直到FQDN响应返回。FQDN响应被缓存下来,所以srcdomain查询通常仅在客户首次请求时延时。srcdomain查询有时不能工作。许多组织并没有保持他们的反向查询数据库与日更新,在该情形下,请求可能会延时非常长时间,直到DNS查询超时。
&&& 假如你使用srcdomain ACL,请确认你自己的DNS in-addr.arpa区域配置正确并且在工作中。
使用port ACL来限制对某些原始服务器端口号的访问,port ACL允许你定义单独的端口或端口范围。例如:acl HTTPports port 80 80
port ACL指向原始服务器的端口号,myport指向squid自己的端口号,用以接受客户请求。假如在http_port指令里指定不止一个端口号,那么squid就可以在不同的端口上侦听。
假如将squid作为站点HTTP加速器和用户代理服务器,可以在80上接受加速请求,在3128上接受代理请求。想让所有人访问加速器,但仅仅你自己的用户能以代理形式访问squid。ACL可能如下:
&&&&&&& acl AccelPort myport 80
&&&&&&& acl ProxyPort myport 3128
&&&&&&& acl MyNet src 172.16.0.0/22
&&&&&&& http_access allow AccelPort&&&&&&&& # anyone
&&&&&&& http_access allow ProxyPort MyNet&& # only my users
&&&&&&& http_access deny ProxyPort&&&&&&&&& # deny others
method ACL指HTTP请求方法,如:acl Uploads
method PUT POST.
Squid知道下列标准HTTP方法:GET, POST, PUT, HEAD, CONNECT, TRACE, OPTIONS和DELETE。另外,来自WEBDAV规范,RFC
2518的方法:PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK。还有非标准的WEBDAV方法:
BMOVE, BDELETE, BPROPFIND。最后,你可以在extension_methods指令里配置squid去理解其他的请求方法。
注意CONNECT方法非常特殊。它是用于通过HTTP代理来封装某种请求的方法。在处理CONNECT方法和远程服务器的端口号时应特别谨慎。如你不希望squid连接到某些远程服务。你该限制CONNECT方法仅仅能连接到HTTPS/SSL或NNTPS端口(443和563)。默认的squid.conf这样做:
&&&&&&& acl CONNECT method CONNECT
&& &&&& acl SSL_ports 443 563
&&&&&&& http_access allow CONNECT SSL_ports
&&& &&& http_access deny CONNECT
在该配置里,squid仅仅允许加密请求到端口443(HTTPS/SSL)和563(NNTPS)。CONNECT方法对其他端口的请求都被拒绝。
PURGE是另一个特殊的请求方法。它是Squid的专有方法,它让管理员能强制删除缓存对象。
该类型指URI访问(或传输)协议。有效值:http, https (same as HTTP/TLS), ftp, gopher, urn, whois, 和cache_object。例如拒绝所有的FTP请求:
&&&&&&& acl FTP proto FTP
&&&&&&& http_access deny FTP
cache_object机制是squid的特性。它用于访问squid的缓存管理接口。默认的squid.conf文件有许多行限制缓存管理访问:
&&&&&&& acl Manager proto cache_object
&& &&&& acl Localhost src 127.0.0.1
&&& &&& http_access allow Manager Localhost
&&& &&& http_access deny Manager
这些配置行仅允许来自本机地址的缓存管理请求,所有其他的缓存管理请求被拒绝。这意味着在squid机器上有帐号的人,能访问到潜在的敏感缓存管理信息。
time ACL允许你控制基于时间的访问,时间为每天中的具体时间,和每周中的每天。日期以单字母来表示,见如下表。时间以24小时制来表示。开始时间必须小于结束时间。
All weekdays (M-F)
日期和时间由localtime()函数来产生。
时间跨越子夜,你需要把它们分成两个ACL来写,或者使用否定机制来定义非忙时。例如:
&&&&&&& acl Offpeak1 20:00-23:59
&&& &&& acl Offpeak2 00:00-04:00
&&&&&&& http_access allow Offpeak1 ...
&&&&&&& http_access allow Offpeak2 ...
另外,你可以这样写:
&&&&&&& acl Peak 04:00-20:00
&&& &&& http_access allow !Peak ...
不应该在同一个time ACL里放置多个日期和时间范围列表。例如,假如你输入:acl Blah time M 08:00-10:00 W 09:00-11:00,实际能做到的是:acl
Blah time MW 09:00-11:00,解析仅仅使用最后一个时间范围。正确的写法是,将它们写进两行:
&&&&&&& acl Blah time M 08:00-10:00
&& &&&& acl Blah time W 09:00-11:00
ident ACL匹配被ident协议返回的用户名。
ident ACL可以对你的用户请求造成延时,推荐仅仅在本地局域网中,并且大部分客户工作站运行ident服务时,才使用ident
注意ident协议不是很安全;squid也有个对客户端执行懒惰ident查询。在该情形下,在等待ident查询时,请求不会延时。
proxy_auth
squid支持HTTP代理验证功能。使用代理验证,客户的包括头部的http请求包含了验证信用选项。squid解密信用选项,并调用外部验证程序以发现该信用选项是否有效。
squid当前支持三种技术以接受用户验证:HTTP基本协议,数字认证协议,和NTLM。基本认证是非常不安全的技术,以明文同时发送。数字认证更安全,但也更复杂。NTLM也比基本认证更安全,然而它是Microsoft发展的专有协议。
为了使用代理验证,你必须配置squid使用大量的外部辅助程序,auth_param指令控制对所有辅助程序的配置。
&&& auth_param指令和proxy_auth ACL是少数在配置文件里顺序重要的实例。你必须在proxy_auth ACL之前定义至少一个验证辅助程序(使用auth_param)。
代理验证不支持HTTP拦截,因为用户代理不知道它在与代理服务器,而非原始服务器通信。
该类型检查客户源IP地址所属的具体AS号。例如,我们虚构某ISP使用AS 64222并且通告使用10.0.0.0/8,172.16.0.0/12,192.168.0.0/16网络。你可以编写这样的ACL,它允许来自该ISP地址空间的任何主机请求:
&&&&&&& acl TheISP src 10.0.0.0/8
&&& &&& acl TheISP src 172.16.0.0/12
&&& &&& acl TheISP src 192.168.0.0/16
&&& &&& http_access allow TheISP
当然,可以这样写:
&&&&&&& acl TheISP src_as 64222
&& &&&& http_access allow TheISP
dst_as ACL经常与cache_peer_access指令一起使用。在该方法中,squid使用与IP路由一致的方式转发cache丢失。
snmp_community
snmp_community ACL对SNMP查询才有意义,后者被snmp_access指令控制。例如:
&&&&&&& acl OurCommunityName snmp_community hIgHsEcUrItY
&&& &&& acl All src 0/0
&&&&&&& snmp_access allow OurCommunityName
&&&&&&& snmp_access deny All
在该情况中,假如community名字设置为hIgHsEcUrItY,SNMP查询才被允许。
maxconn ACL指来自客户IP地址的大量同时连接。某些squid管理员发现这是个有用的方法,用以阻止用户滥用代理或者消耗过多资源。
arp ACL用于检测cache客户端的MAC地址(以太网卡的物理地址)。该特性使用非移植性代码。运行./configure时增加--enable-arp-acl选项,就可以激活该功能。
arp ACL有另一个重要限制。客户主机和squid在同一子网,它才能工作。在squid和你的用户之间有路由器存在,你可能不能使用arp
srcdom_regex
srcdom_regex ACL允许你使用正则表达式匹配客户域名。限制是:某些客户地址不能反向解析到域名。
dstdom_regex
dstdom_regex ACL也与dstdomain相似。下面的例子匹配以www开头的主机名:acl
WebSite dstdom_regex -i ^www/.如下是另一个有用的正则表达式,用以匹配在URL主机名里出现的IP地址:acl
IPaddr dstdom_regex [0-9]$
url_regex ACL用于匹配请求URL的任何部分,包括传输协议和原始服务器主机名。例如,如下ACL匹配从FTP服务器的MP3文件请求:
&&&&&&& acl FTPMP3 url_regex -i ^ftp://.*/.mp3$
urlpath_regex
urlpath_regex与url_regex非常相似,不过传输协议和主机名不包含在匹配条件里。这让某些类型的检测非常容易。例如,假设你必须拒绝URL里的&sex&,但仍允许在主机名里含有&sex&的请求,那么这样做:
&&&&&&& acl Sex urlpath_regex sex
browser ACL对user-agent头执行正则表达式匹配。例如,拒绝不是来自Mozilla浏览器的请求,可以这样写:
&&&&&&& acl Mozilla browser Mozilla
&&& &&& http_access deny !Mozilla
req_mime_type
req_mime_type ACL指客户HTTP请求里的Content-Type头部。该类型头部通常仅仅出现在请求消息主体里。req_mime_type
ACL值是正则表达式。你可以这样编写ACL去捕获音频文件类型:acl AuidoFileUploads req_mime_type -i ^audio/
rep_mime_type
该类型ACL指原始服务器的HTTP响应里的Content-Type头部。它仅在使用http_reply_access规则时才有用。假如你想使用squid阻塞Java代码,你可以这样写:
&&&&&&& acl JavaDownload rep_mime_type application/x-java
&&& &&& http_reply_access deny JavaDownload
ident_regex
ident_regex允许你使用正则表达式,代替严格的字符串匹配,这些匹配是对ident协议返回的用户名进行。例如,如下ACL匹配包含数字的用户名:acl
NumberInName ident_regex [0-9]
proxy_auth_regex
该ACL允许对代理认证用户名使用正则表达式。例如,如下ACL匹配admin,administrator和administrators:
acl Admins proxy_auth_regex -i ^admin
外部ACL:可以指示squid发送某些信息片断到外部进程,然后外部的辅助程序告诉squid,数据匹配或不匹配。
external_acl_type指令定义新的外部ACL类型。通用语法:
&&& external_acl_type type-name [options] format helper-command
type-name是用户定义的字串。
Squid当前支持如下选项(options):
&&&&&&& ttl=n:用以缓存匹配值的时间长短。
&&&&&&& negative_ttl=n:用以缓存不匹配值的时间长短。
&&&&&&& concurrency=n:衍生的辅助程序的数量。
&&&&&&& cache=n:缓存结果的最大数量。
格式是以%字符开始的一个或多个关键字。squid当前支持如下格式:
&&&&&&& %LOGIN:从代理验证信用选项里获取的用户名。
&&&&&&& %IDENT:从RFC 1413 ident获取的用户名。
&&&&&&& %SRC:客户端IP地址。
&&&&&&& %DST:原始服务器IP地址。
&&&&&&& %PROTO:传输协议(例如HTTP,FTP等)
&&&&&&& %PORT:原始服务器的TCP端口。
&&&&&&& %METHOD:HTTP请求方法。
&&&&&&& %{Header}:HTTP请求头部的值;
&&&&&&& %{Hdr:member}:选择某些数量的基于列表的HTTP头部
可以在这里包含命令参数。例如,整条命令可能类似如此:
/usr/local/squid/libexec/my-acl-prog.pl -X -5 /usr/local/squid/etc/datafile
将这些放在一个长行里。squid不支持如下通过反斜杠分隔长行的技术,所以请记住所有这些必须放在单行里
编写引用它的acl行。这相对容易,语法如下:
&&&&&&& acl acl-name external type-name [args ...]
如下是个简单示例:
&&&&&&& acl MyAcl external MyAclType
squid接受在type-name后面的任意数量的参数。
处理长ACL列表
从外部文件里包含ACL列表。语法:acl name &filename&
这里的双引号指示squid打开filename,并且将它里面的内容分配给ACL。
文件可以包含以#开头的注释。注意在该文件里的每个IP地址必须是一个单独的行。acl行里的任何地方,以空格来分隔值,新行是包含ACL值的文件的分界。
Squid如何匹配访问控制元素
squid在检查ACL元素值时使用OR逻辑。当squid找到第一个值匹配时,它停止搜索。这意味着把最可能匹配的值放在列表开头处,能减少延时。
访问控制规则
squid有大量其他的访问控制列表:
http_access:它决定哪些客户HTTP请求被允许,和哪些被拒绝。
http_reply_access:基于响应内容类型来允许或拒绝请求。
icp_access:squid被配置来服务ICP响应,那么该使用icp_access列表。
no_cache:使用no_cache访问列表来指示squid,它不必存储某些响应(在磁盘或内存里)。
miss_access:主要用于squid的邻居cache。它决定squid怎样处理cache丢失的请求。如果squid使用集群技术,那么该功能必需。
redirector_access:该访问列表决定哪个请求被发送到重定向进程。可以使用redirector_access列表来阻止某些请求被重写。
ident_lookup_access: ident_lookup_access列表与redirector_access类似。它允许你对某些请求执行懒惰ident查询。
always_direct: 该访问列表影响squid怎样处理与邻居cache转发cache丢失。
never_direct: never_direct与always_direct相反。匹配该列表的cache丢失请求必须发送到邻居cache。
snmp_access: 该访问列表应用到发送给squid的SNMP端口的查询。
broken_posts: 该访问列表影响squid处理某些POST请求的方法。
cache_peer_access: 该访问列表控制发送到邻居cache的HTTP请求和ICP/HTCP查询。
reply_body_max_size: 该访问列表限制对HTTP响应主体的最大可接受size。
delay_access: 该访问规则列表控制是否延时池被应用到某个请求的cache丢失响应。
tcp_outgoing_address: 该访问列表绑定服务端TCP连接到指定的本地IP地址。
tcp_outgoing_tos: 该访问列表能设置到原始服务器和邻居cache的TCP连接的不同TOS/Diffserv值。
header_access: 使用该指令,你能配置squid从它转发的请求里删除某些HTTP头部。
header_replace: 该指令允许你替换,而不是删除,HTTP头部的内容。
访问规则语法
访问控制规则的语法如下:
access_list allow|deny [!]ACLname ...
将最常用的ACL放在列表的开始位置,可以减少squid的CPU负载。
请谨慎的编写always_direct,never_direct,和no_cache规则。在always_direct中,allow规则意味着匹配的请求直接转发到原始服务器。always_direct
deny规则意味着匹配的请求不强迫发送到原始服务器,但假如邻居cache不可到达,那可能还是会这么做。no_cache规则也有点麻烦。这里,你必须对不必被cache的请求使用deny。
如何匹配访问规则
squid在搜索ACL元素时使用的“或”逻辑。访问规则恰好相反,squid使用“与”逻辑。如下示例:
access_list allow ACL1 ACL2 ACL3
对该匹配规则来说,请求必须匹配ACL1,ACL2,ACL3中的任何一个。
对某个规则来说,将最少匹配的ACL放在首位,能使效率最佳。考虑如下示例:
假如最后的规则是deny规则,默认动作是允许请求。在访问列表的最后加上一条,明确允许或拒绝所有请求,是好的实际做法。
src 0/0 ACL表示匹配每一个和任意类型的请求。
访问列表风格
该将更具体的和受限制的访问列表放在首位。
无论何时,你编写了一个带两个或更多ACL元素的规则,建议你在其后紧跟一条相反的,更广泛的规则。
当squid遇到某个ACL不能被检查时,它延迟决定并且发布对必要信息的查询(IP地址,域名,用户名等)。当信息可用时,squid再次在列表的开头位置检查这些规则。它不会从前次检查剩下的位置继续。假如可能,你应该将这些最可能被延时的ACL放在规则的顶部,以避免不必要的,重复的检查。
减缓和加速规则检查
下列访问规则被快速检查:
header_access
reply_body_max_size
reply_access
ident_lookup
delay_access
miss_access
broken_posts
icp_access
cache_peer_access
redirector_access
snmp_access
配置ip限制实例
acl ip1 src 218.94.75.50
acl ip2 src 218.94.75.58
acl ip3 src 123.56.138.21
以上配置ip来源规则,三个规则分别是ip1、ip2、ip3
后面再配置三个http_access
http_access allow ip1
http_access allow ip2
http_access allow ip3
在配置文件的所有http_access最后,要加上
http_access deny all
squid是一行一行检查http_access权限,先检查的优先级最高,前面的规则全部不匹配的请求,归类到最后一条总规则中,即禁止请求
squid正向代理使用方法
前文完成了squid的安装、配置、访问控制,此处已经可以作为正向代理使用了,即已经配置为一台网上常见的代理服务器
以firefox 45.0.2为例
打开菜单——》选项——》高级——》网络——》连接——》设置——》手动配置代理——》HTTP代理填入squid的ip地址,端口填入你配置的监听端口,勾上“为所有协议使用相同代理”——》保存
上面是正向代理的使用方法,如果是带参数直接访问代理ip,通过对参数的解析实现访问指定网址如何实现呢
squid通过重定向器支持这种模式,通过在配置文件中写下面这行:
redirect_program 重定向脚本
下面的重定向器规则全篇转载自:http://blog.csdn.net/chinalinuxzend/article/details/1784465
重定向器是squid的外部程序,它重写来自客户请求的URI。例如,尽管某个用户请求这个页面:http: ///page1.html ,重定向器可以将请求改变到别的地方,例如:/page2.html 。squid自动抓取新的URI,就像是客户端的原始请求一样。假如响应可被缓存,squid将它存储在新的URI下。
重定向功能允许你执行与squid相关的许多有趣事情。许多站点使用它们实现如下目的:访问控制,移除广告,本地镜像,甚至用以绕开浏览器的bug。
关于使用重定向器进行访问控制的好处之一是,你可以将用户的请求重定向到某个页面,这个页面详细解释为何她的请求被拒绝。你也会发现重定向器比squid内建的访问控制提供更多的弹性。然而不久你会看到,重定向器并不能访问包含在客户请求里的完整信息。
许多人使用重定向器来过滤web页面广告。大部分情形下,可以将对GIF或JPEG广告图片的请求,改变为请求位于本地服务器上的,小而空的图片。这样,广告就消失了,然而不会影响页面布局。
所以在本质上,重定向器其实就是一个程序,它从标准输入里读取URI和其他信息,并将新的URI写往标准输出。Per和是写重定向器的流行语言,尽管某些作者使用编译性语言(例如C)以求更好的性能。
Squid的源代码没有包含任何重定向程序。作为管理员,你有责任编写自己的重定向器,或者下载别人编写的。该章开头部分描述在squid和重定向 进程之间的接口。我也提供几个简单的Perl重定向器示例。假如你志在使用别人的重定向器,而不是自己编写,请跳到11.3章。
11.1 重定向器接口
重定向器在其标准输入里,每次一行的接受来自squid的数据。每行包括下列四个元素,以空格分开:
2)客户IP地址和完全可验证域名
3)用户名,通过RFC 1413 ident或代理验证
4)HTTP请求方式
/page1.html 192.168.2.3/user.host.name jabroni GET
请求URI取自客户请求,包括任何查询条件。然而,分段标记(例如#字符和随后的文本)被移除了。
第二个元素包含客户IP地址,和可选的完整可验证域名(FQDN)。假如激活了log_fqdn指令或使用了srcdomain ACL元素,FQDN才会设置。尽管那样,FQDN也许仍未知,因为客户网络管理员没有在其DNS里正确的设置反向指针区域。假如squid不知道客户的 FQDN,它用一个短横线(-)代替。例如:
/page1.html 192.168.2.3/- jabroni GET
假如squid了解请求背后的用户名,客户ident域才会设置。假如使用了代理验证,ident ACL元素,或激活了ident_lookup_access,这点才会发生。然而请记住,ident_lookup_access指令不会导致 squid延缓请求处理。换句话说,假如你激活了该指令,但没有使用访问控制,squid在写往重定向进程时,也许仍不知道用户名。假如squid不知道 用户名,它显示一个短横线(-)。例如:
/page1.html 192.168.2.3/- - GET
Squid从重定向进程里读回一个元素:URI。假如squid读取一个空行,原始URI保留不变。
重定向程序永不退出,除非在标准输入里发生end-of-file。假如重定向进程确实过早退出,squid在cache.log里写一条警告信息:
WARNING: redirector #2 (FD 18) exited
假如50%的重定向进程过早退出,squid会以致命错误消息退出。
11.1.1 处理包含空格的URI
假如请求URI包含空格,并且uri_whitespace指令设置为allow,那么任何在URI里的空格被递交到重定向器。如果重定向器的解析器很简单,那它在这种情况下会很困惑。在使用重定向器时,有2个选项来处理URI里的空格。
一个选项是设置uri_whitespace指令为任何值,除了allow。默认的设置strip,在大多数情况下可能是个好的选择,因为squid在解析HTTP请求时,它简单的从URI里删除空格。该指令的其他值的信息,请见附录A。
假如上述方法不可行,你必须确保重定向器的解析器足够巧妙,以检测额外的元素。例如,假如它发现接受自squid的行里的元素不止4个,它会假设最后3个元素是IP地址,ident,和请求方式。在最后3个元素之前的任何东西,组成请求URI。
11.1.2 产生HTTP重定向消息
当某个重定向器改变客户的URI时,它通常不知道squid决定抓取新的资源。也就是说,这点违背了HTTP RFC。假如你想友好而保留兼容性,有一个小窍门可让squid返回HTTP重定向消息。简单的让重定向器在新的URI前面插入301:, 302:, 303:, 或307:。
例如,假如重定向器在其标准输出里写如下行:
301:/page2.html
Squid返回类似如下的响应到客户端:
HTTP/1.0 301 Moved Permanently
Server: squid/2.5.STABLE4
Date: Mon, 29 Sep :23 GMT
Content-Length: 0
Location: /page2.html
X-Cache: MISS from zoidberg
Proxy-Connection: close
11.2 重定向器示例
示例11-1是用perl写的非常简单的重定向器。它的目的是,将对站点的HTTP请求,发送到位于澳洲的本地镜像站点。对看起来是请求或其镜像站点之一的URI,该脚本输出新的URI,将主机名设为.
重定向程序遇到的通用问题是缓存I/O。注意这里我确保stdout不可缓存。
Example 11-1. A simple redirector in Perl
#!/usr/bin/perl -wl
# don't buffer the output
while (&&) {
($uri,$client,$ident,$method) = ( );
($uri,$client,$ident,$method) =
next unless ($uri =~ m,^http://.*/.squid-cache/.org(/S*),);
$uri = &http://www1.au.squid-cache.org$1&;
} continue {
print &$uri&;
示例11-2是另一个稍微复杂点的脚本。在这里我做了个初步尝试,当URI包含不当词汇时,拒绝该请求。该脚本论证了解析输入域的另一个方法。假如没有得到所有5个请求域,重定向器返回一个空行,请求保留不变。
该示例也优待某些用户。假如ident等于&BigBoss,& ,或来自192.168.4.0子网,请求就直接通过。最后,我使用301:窍门来让squid返回HTTP重定向消息到客户端。注意,本程序既非有效的,又非足够巧妙的,来正确拒绝坏请求。
Example 11-2. A slightly less simple redirector in Perl
#!/usr/bin/perl -wl
# don't buffer the output
$DENIED = &/denied.html&;
&load_word_list( );
while (&&) {
unless (m,(/S+) (/S+)/(/S+) (/S+) (/S+),) {
$uri = '';
$uri = $1;
$ipaddr = $2;
#$fqdn = $3;
$ident = $4;
#$method = $5;
next if ($ident eq 'TheBoss');
next if ($ipaddr =~ /^192/.168/.4/./);
$uri = &301:$DENIED& if &word_match($uri);
} continue {
print &$uri&;
sub load_word_list {
@words = qw(sex drugs rock roll);
sub word_match {
foreach $w (@words) { return 1 if ($uri =~ /$w/); }
关于编写自己的重定向器的更多主意,我推荐阅读11.5章里提到的重定向器的源代码。
11.3 重定向器池
重定向器可能经过任意长的时间才返回应答。例如,它可能要查询数据库,搜索正则表达式的长列表,或进行复杂的计算。squid使用重定向进程池以便它们能并行工作。当某个重定向器忙时,squid将请求递交给另一个。
对每个新请求,squid按顺序检查重定向进程池。它将请求提交给第一个空闲进程。假如请求率非常低,第一个重定向器也许自己能处理所有请求。
可以使用 redirect_children指令来控制重定向器池的size。默认值是5个进程。注意squid不会根据负载来动态的增或减进程池的size。这 样,建议你适当的放宽size限制。假如所有的重定向器忙碌,squid会将请求排队。假如队列变得太大(大于进程池size的2倍),squid以致命 错误消息退出:
FATAL: Too many queued redirector requests
在该情形下,你必须增加重定向器池的size,或改变其他东西以让重定向器能更快的处理请求。你可以使用cache管理器的redirector页面来发现是否有太少,或太多重定向器在运行。例如:
% squidclient mgr:redirector
Redirector Statistics:
program: /usr/local/squid/bin/myredir
number running: 5 of 5
requests sent: 147
replies received: 142
queue length: 2
avg service time: 953.83 msec
# Requests
Offset Request
0 http://...
0 http://...
1 cache_o...
0 http://...
0 http://...
在该示例里,假如你见到最后一个重定向器的请求数量,几乎和倒数第二个一样多,就应该增加重定向器池的size。另一方面,假如你见到许多重定向器没有请求,就该减少进程池的size。
11.4 配置Squid
下列5个squid.conf指令,控制squid里的重定向器的行为。
11.4.1 redirect_program
redirect_program指令指定重定向程序的命令行。例如:
redirect_program /usr/local/squid/bin/my_redirector -xyz
注意,重定向程序必须能被squid的用户ID执行。假如因为某些理由,squid不能执行重定向器,你将在cache.log里见到错误消息。例如:
ipcCreate: /usr/local/squid/bin/my_redirector: (13) Permission denied
因为squid的工作方式,主squid进程可能不知道执行重定向程序的问题所在。squid不会检测到错误,直到它试图写一个请求和读到一个响应。然后它打印:
WARNING: redirector #1 (FD 6) exited
这样,假如你见到发送给squid的第一个请求的如此错误,请仔细检查cache.log的其他错误,并确保重定向程序可被squid执行。
11.4.2 redirect_children
redirect_children指令指定squid应该开启多少重定向进程。例如:
redirect_children 20
当所有重定向器同时忙碌时,squid会通过cache.log发出警告:
WARNING: All redirector processes are busy.
WARNING: 1 pending requests queued.
假如见到这样的警告,你应该增加子进程的数量,并重启(或reconfigure)Squid。假如队列的size变成重定向器数量的2倍,squid以致命错误退出。
不要试图将redirect_children设为0来禁止squid使用重定向器。简单的从squid.conf里删除redirect_program行就可以了。
11.4.3 redirect_rewrites_host_header
正常情况下,squid在使用重定向器时,会更新请求的Host头部。也就是说,假如重定向器返回的新URI里包含不同的主机名,squid将新的 主机名放在Host头部。假如使用squid作为代理人(surrogate,见15章),你也许想将 redirect_rewrites_host_header指令设为off来禁止这种行为:
redirect_rewrites_host_header off
11.4.4 redirector_access
正常情况下,squid将每个请求发送往重定向器。然而,可以使用redirector_access规则来有选择的发送某些请求。该语法与http_access相同:
redirector_access allow|deny [!]ACLname ...
acl Foo src 192.168.1.0/24
acl All src 0/0
redirector_access deny Foo
redirector_access allow All
在该情形里,对任何匹配Foo ACL的请求,Squid跳过重定向器。
11.4.5 redirector_bypass
假如激活了redirector_bypass指令,squid在所有重定向器忙碌时,会绕过它们。正常情况下,squid将未处理请求排队,直到某个重定向进程可用。假如该队列增长得太大,squid以致命错误退出。激活该指令确保squid永不会达到那种状态。
当然,折衷点是当负载高时,某些用户请求可能不会被重定向。假如这样对你没问题,简单的激活该指令即可:
redirector_bypass on
重定向器实例
目的是解析下面的地址
http://代理服务器ip:代理服务器端口/url//zt/slg/28/index.shtml
这样的请求重定向访问后面指定的url
/zt/slg/28/index.shtml
我不会perl,所以用python实现
vim /Data/local/squid-3.5.17/bin/proxy.py
#!/usr/bin/python -u
import sys,re,time
starttime = time.time()
def stdout(msg):
sys.stdout.write(msg+&\n&)
sys.stdout.flush()
def log(msg):
f=open('/Data/local/squid-3.5.17/var/logs/redirector.log','a')
f.write(msg+&\n&)
while True:
line = sys.stdin.readline().strip()
if not line:
time.sleep(0.01)
if time.time() - starttime & 60:
sys.exit()
split = line.split()
url = split[0]
pattern = 'http://[^/]+/url/(.+)'
if not re.search(pattern,url):
stdout(url)
time.sleep(0.01)
starttime = time.time()
ret = re.findall(pattern,url)
if len(ret) == 0:
stdout('403')
time.sleep(0.01)
starttime = time.time()
new_url = 'http://'+ret[0]
stdout(new_url)
log(&new_url: &+new_url)
time.sleep(0.01)
starttime = time.time()
except Exception,e:
sys.exit(-1)
*注意点:写重定向器,通常遇到的问题是缓存I/O,python是行缓存,经常的做法是在每条输出之后加上换行符“\n”,并且立马sys.stdout.flush()。或者在脚本开头的脚本执行器定义处带上参数-u,表示python使用非缓存模式
#!/usr/bin/python -u
或者把 export PYTHONUNBUFFERED=1 环境变量写到 .bashrc 里去,这两种方法是等效的
编辑squid配置文件加上一行
redirect_program /Data/local/squid-3.5.17/bin/proxy.py
重定向器一定要给squid可以使用的权限
chmod nobody:nobody /Data/local/squid-3.5.17/bin/proxy.py
现在将squid重启,在浏览器访问
http://代理服务器ip:代理服务器端口/url/url地址可带query参数
就会自动重定向到后面的url地址了
squid优化,提高命中率
squid是一个代理服务器,对缓存的支持非常强大,因此启用缓存并进行相应优化,降低squid的重复请求和压力
性能方面一般可以调整如下几项设置
#squid的磁盘cache的置换策略
#squid提供的三种置换策略:最少近来使用(LRU),贪婪对偶大小次数(GDSF),和动态衰老最少经常使用(LFUDA).
#LRU是默认的策略,并非对squid,对其他大部分cache产品都是这样。LRU是流行的选择,因为它容易执行,并提供了非常好的性能。在32位系统上,LRU相对于其他使用更少的内存(每目标12对16字节)。在64位系统上,所有的策略每目标使用24字节。
#如果要要使用GDSF和LFUDA.你必须要在./configure时使用--enable-removal-policies选项
cache_replacement_policy lru
#squid使用共享内存大小,一般设置为内存1/3左右
cache_mem 1024 MB
#squid对应系统管理用户
cache_effective_user nobody
#squid对应系统管理组
cache_effective_group nobody
#单个文件最大缓存大小
maximum_object_size 4096 KB
#单个文件在内存中最大缓存大小
maximum_object_size_in_memory 512 KB
#访问列表限制对HTTP响应主体的最大可接受值,当某个响应的HTTP主体长度大于该值,将立即被删除
reply_body_max_size 5116 KB
#单个文件最小缓存大小
minimum_object_size 1 bytes
#对客户端长连接KeepAlive.这个参数的支持,默认是打开的.现在的客户端浏览器基本都支持的
#是否打开要看具体应用,因为现在的IE都是多线程的;打开client_persistent_connections的效果可以通过squidclient -p端口 mgr:pconn监控
client_persistent_connections on
#对服务器的KeepAlive是用于在服务器端传递消息时使用已打开的socket链接以节省资源而设置的
#对于静态文件型squid,最好打开,也别忘记把后面apache或其它web server的KeepAlive打开;动态服务要随机应变
server_persistent_connections on
#这个是KeepAlive连接超时时间,建议和后面的Web服务器一样,用缺省值基本没问题
persistent_request_timeout 45 seconds
#squid与其他服务器建立连接多久闲置时间关闭回话,to origin server or peer/keepalive
pconn_timeout 45 seconds
#客户端请求超时时间,to client/wait client's request
request_timeout 240 seconds
#客户端连接超时时间,to client/all request time
client_lifetime 240 seconds
#连接超时时间,to origin server/only connect
connect_timeout 240 seconds
#内容读取时间,to origin server or peer/wait recv data
read_timeout 240 seconds
refresh_pattern指令
squid用refresh_pattern指令决定一个页面进入cache后,它在cache中停留的时间,即是否缓存该内容的规则
以下内容全篇转载自:http://www.jb51.net/article/17794.htm
refresh_pattern的作用:&
用于确定一个页面进入cache后,它在cache中停留的时间。refresh_pattern规则仅仅应用到没有明确过时期限的响应。原始服务器能使用Expires头部,或者Cache-Control:max-age指令来指定过时期限。&
语法:refresh_pattern [-i] regexp min percent max [options]&
min参数是分钟数量。它是过时响应的最低时间限制。如果某个响应驻留在cache里的时间没有超过这个最低限制,那么它不会过期。类似的,max参数是存活响应的最高时间限制。如果某个响应驻留在cache里的时间高于这个最高限制,那么它必须被刷新。&
在最低和最高时间限制之间的响应,会面对squid的最后修改系数LM-factor算法LM-factor=(response age)/(resource age)。对这样的响应,squid计算响应的年龄和最后修改系数,然后将它作为百分比值进行比较。响应年龄简单的就是从原始服务器产生,或最后一次验证响应后,经历的时间数量。源年龄在Last-Modified和Date头部之间是不同的。LM-factor是响应年龄与源年龄的比率。&
常用的几个参数的意思&
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时间戳时才能工作。外面进来的请求保留no-cache指令,以便它到达原始服务器。&
一般情况可以使用 reload-into-ims。它其实是强行控制对象的超时时间,这违反了http协议的精神,但是在带宽较窄的场合,可以提高明显系统相应时间。&
refresh_pattern -i \.css$ 9600 reload-into-ims&
refresh_pattern -i \.xml$ 9600 reload-into-ims&
refresh_pattern -i \.html$ 9600 reload-into-ims-&
refresh_pattern -i \.shtml$ 9600 reload-into-ims&
refresh_pattern -i \.hml$ 9600 reload-into-ims&
refresh_pattern -i \.jpg$ 9600 reload-into-ims&
refresh_pattern -i \.png$ 9600 reload-into-ims&
refresh_pattern -i \.gif$ 9600 ignore-reload&
refresh_pattern -i \.bmp$ 9600 reload-into-ims&
refresh_pattern -i \.js$ 9600 reload-into-ims&
ignore-reload&
该选项导致squid忽略请求里的任何no-cache指令。&
所以。如果希望内容一进入cache就不删除,直到被主动purge掉为止,可以加上ignore-reload选项,这个我们常用在mp3,wma,wmv,gif之类。&
Examples:&
refresh_pattern -i \.mp3$ 80 ignore-reload&
refresh_pattern -i \.wmv$ 80 ignore-reload&
refresh_pattern -i \.rm$ 80 ignore-reload&
refresh_pattern -i \.swf$ 80 ignore-reload&
refresh_pattern -i \.mpeg$ 80 ignore-reload&
refresh_pattern -i \.wma$ 80 ignore-reload&
resource age =对象进入cache的时间-对象的last_modified&
response age =当前时间-对象进入cache的时间&
LM-factor=(response age)/(resource age)&
举个例子,这里只考虑percent, 不考虑min 和max&
例如:refresh_pattern 20%&
假设源服务器上/index.htm -----lastmodified 是
squid上 /index.htm index.htm进入cache的时间
1)如果当前时间
resource age =3点-2点=60分钟&
response age =0分钟&
index.htm还可以在cache停留的时间(resource age)*20%=12分钟&
也就是说,index.htm进入cache后,可以停留12分钟,才被重新确认。&
2)如果当前时间
resource age =3点-2点=60分钟&
response age =5分钟&
index.htm还可以在cache停留的时间(resource age)*20%=12分钟-5=7&
LM-factor=5/60=8.3%&20%&
一直到 03:12:00 LM-factor=12/60=20% 之后,cache中的页面index.htm终于stale。&
如果这时没有index.htm的请求,index.htm会一直在缓存中,如果有index.htm请求,squid收到该请求后,由于已经过期, squid会向源服务器发一个index.htm是否有改变的请求,源服务器收到后,如果index.htm没有更新,squid就不用更新缓存,直接把缓存的内容放回给客户端,同时,重置对象进入cache的时间为与源服务器确认的时间,比如 03:13:00,如果正好在这个后重新确认了页面。重置后,resource age变长,相应在cache中存活的时间也变长。&
如果有改变则把最新的index.htm返回给squid,squid收到会更新缓存,然后把新的index.htm返回给客户端,同时根据新页面中的Last_Modified和取页面的时间,重新计算resource age,进一步计算出存活时间。&
实际上,一个页面进入cache后,他的存活时间就确定了,即 (resource age) * 百分比,一直到被重新确认
设置squid不缓存任何域名网站文件
如果只是用squid做代理,不想缓存所有网站文件的话
可以修改squid配置 将squid.conf里的cache_dir ufs /home/cache
改成cache_dir ufs /home/cache
read-only选项指示Squid继续从cache_dir读取文件,但不往里面写新目标。
假如你想把cache文件从一个磁盘迁移到另一个磁盘,那么可使用该选项。如果你简单的增加一个cache_dir,并且删除另一个,squid的命中率会显著下降。在旧目录是read-only时,你仍能从那里获取cache命中。在一段时间后,就可以从配置文件里删除read-only缓存目录
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:961399次
积分:9475
积分:9475
排名:第1633名
原创:184篇
转载:88篇
评论:79条
(1)(2)(2)(4)(1)(3)(1)(4)(1)(3)(3)(1)(2)(3)(2)(4)(10)(1)(1)(1)(1)(6)(5)(1)(4)(1)(2)(1)(2)(1)(2)(1)(1)(2)(5)(5)(5)(3)(8)(6)(10)(16)(12)(4)(5)(10)(6)(7)(4)(12)(16)(8)(22)(24)(5)

我要回帖

更多关于 squid 正向代理 的文章

 

随机推荐