Submitted by admin on 2012, March 26, 2:40 PM
1. 编译和安装
暂时使用CENTOS 5.2上缺省安装的2.6STABLE7版本
2. squid配置
2.1 最简单配置
http_port 80
cache_peer 127.0.0.1 parent 8080 0 no-query default originserver name=bes
acl all src all
http_access allow all
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
2.2 监控管理
acl snmppublic snmp_community public
snmp_port 3401
snmp_access allow snmppublic localhost
snmp_access deny all
2.3 更安全的配置
acl all src all
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8
acl SSL_ports port 443 # https
acl Safe_ports port 80 # http
acl Safe_ports port 443 # https
acl purge method PURGE
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost
http_access deny all
cache_effective_user squid
cache_effective_group squid
2.4打开相关性能告警
high_response_time_warning 1000
high_page_fault_warning xxx
high_memory_warning xxx
2.5 其他
visible_hostname proxy.hostname
3. 调试
3.1 在配置文件中设置debug_options ALL,9
3.2 cache.log
3.3 squid -XF
3.4 squid -k parse 分析配置文件语法
4. 网络相关优化
4.1 减少TIME_WAIT套接字数量
#vi /etc/sysctl.conf
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
#/sbin/sysctl -p
详见http://blog.s135.com/read.php?338
5. DISK IO相关的优化
5.1 cache_dir设置的考虑
• cache_dir采用二级目录方式保存cache object,做配置时不宜过大,建议为规划容量的1倍,否则建立swap目录会花费较多时间。推荐保留10%的空间。这些额外的空间用于存放squid的swap.state文件和临时文件。
• 可以配置多个cache_dir,建议每个cache_dir都放在不同的物理硬盘上,以改善IO效率
5.2 squid相关的目录设置
• log和cahce_dir不要放在一个物理盘上
• cache_dir所在的盘建议使用ReiserFS格式
• mount cache_dir盘时建议使用noatime参数
5.3 DISK Cache的相关设置
• max_open_disk_fds
This directive defines an upper limit on the number of file descriptors that Squid should open for reading and writing cache files on disk. 当达到这个限制后,squid会跳过DISK cache,从而避免IO持续恶化。
缺省为0(无限制)。[建议]For a single disk cache, 900 is a good choice. For a dual disk cache, try 1400.
• max_filedescriptors
允许打开的最大文件描述符,实际允许打开的数量也受编译squid的--with-maxfd的影响。缺省为0。[建议]
• maximum_object_size
maximum_object_size 1024 KB
• cache_swap_low/cache_swap_high ???
5.4 Linux设置
• filedescriptors
一共有两个方面的限制: 整个系统,当前用户。
http://prefetch.net/blog/index.php/2009/07/31/increasing-the-number-of-available-file-descriptors-on-centos-and-fedora-linux-servers/
整个系统:
动态调整,每次启动后该设置会丢失:
#ulimit -HSn 4096
在/etc/sysctl.confg中设置:
# vi /etc/sysctl.conf
fs.file-max = 100000
# sysctl -p
[ulimit显示的值和/proc/sys/fs/file-max中显示的值有什么关系]
ulimit command provides control over the resources available to the shell and to processes started by it, on systems that allow such control. The maximum number of open file descriptors displayed with following command
#vi /etc/security/limits.conf
单个用户
* - nofile 8192
6. MEM优化考虑
• cache_mem
Squid占用内存量似乎不受这个参数的控制,此参数不必设得太大,适量就行。服务器:cache_mem 100 MB
• maximum_object_size_in_memory:
设置较小的maximum_object_size_in_memory值有助于有效控制squid过度占用内存
• client_db off
• The ratio of memory-to-disk can be important. We recommend that you have at least 32 MB of RAM for each GB of disk space that you plan to use for caching.
7. CPU优化相关
Squid is a single process application and can not make use of SMP. If you want to make Squid benefit from a SMP system you will need to run multiple instances of Squid and find a way to distribute your users on the different Squid instances just as if you had multiple Squid boxes.
8. 其他问题
8.1 和Redirect合作的关系
8.2 log rotate
定期进行log rotate
8.3 cachemgr.cgi
9. 参考资料
squid/缓存 | 评论:0
| Trackbacks:0
| 阅读:907
Submitted by admin on 2012, March 21, 1:37 PM
一、DNS常识
1、DNS查询:分为递归查询和迭代查询两种
(1) 递归查询: 即客户端向本地DNS服务器请求查询域名,本地DNS服务器收到查询任务后如自身无法回答则向其他服务器查询,直到查到结果后返回结果给客户端。期间DNS服务器可能要查询很多其他DNS服务器。
(2)迭代查询:即客户端向本地服务器请求查询域名,本地DNS服务器无法回答,则给客户端返回另一个能查询域名的服务器地址,客户端再向另一服务器查询,期间可能客户端需查询多个DNS服务器,最终查到结果。
2、DNS服务器分类:
DNS服务器分为:
(1)master(主DNS服务器):拥有区域数据的文件,并对整个区域数据进行管理。
(2)slave(从服务器或叫辅助服务器):拥有主DNS服力器的区域文件的副 本,辅助主DNS服务器对客户端进行解析,当主DNS服务器坏了后,可以完全接替主服务器的工作。
(3)forward:将任何查询请求都转发给其他服务器。起到一个代理的作用。
(4)cache:缓存服务器。
(4)hint:根DNS internet服务器集。
【主机名或域名】ttl] [calss] [type] [orgin] [mail]
主机名或域名:一般 用@代替。每个区域都有自已的SOA记录,此处的为指定的域名。用@表示当前的源,也可以手工指定域名。
ttl:通常省略
class:类别,SOA记录的类别对internet乖哦说缺省为IN
type:类型,SOA记录的类型就是SOA,指明哪个DNS服务器对这个区域有授权。
origin:域区文件资 源,这个域区文件源就是这个域主DNS服务器的主机名,注意这里要求是完整的主机名,后面一定要加上“."。上例中:www.29zjt.com. 而不是www.29zjt.com 如果没有加后面的点,结果将是:www.29zjt.com.29zjt.com
mail:一般指管理员的邮箱。但和一般 的邮箱不同,用"."代替了"@",尾部也 要加上“."
2009121001 //作为版本控制,当域区文件修改时,序号就增加,辅助服务器对比发现与自已的不同后,就会做出更新,与主服力器同步
28800 //辅助服务器与主服务器进行更新的等待时间。间隔多久与主服务器进行更新,单位为秒。
14400 //重试间隔。当辅助服务器请求与主服务器更新失败后,再间隔多久重试传递
720000 //到期时间。当辅助服务器与主服务器之间刷新失败后,辅助服务器还提供多久的授 权回答。因为当与主服务器失去联系一定时间后,(这个时间就是此处定义的时间),辅助服务器会把本地数据当作不可靠的数据,将停止提供查询。
如果主服务器恢复正常,则辅助服务器重新开始计时。
86400 ) //最小TTL,即最小有效时间,表明客户端得到的回答在多长时间内有效。如果TTL时间长,客户端缓存保存时间长,客户端在收到查询结果时开始计时(TTL)时间内有相同的查询周日不再查询服输务器,直接查自已的缓存。如果TTL时间短,则缓存更新的频率快
dns | 评论:0
| Trackbacks:0
| 阅读:905
Submitted by admin on 2012, March 19, 11:31 AM
由于页面问题或web服务器临时不可用,会导致squid缓存一个错误信息(400,500等错误),正好是首页出错并被老板发现了。。。。
如何不缓存这些错误页面呢?
要想不缓存错误页面据说可以设成negative_ttl 1 second
# TAG: negative_ttl time-units
# Time-to-Live (TTL) for failed requests. Certain types of
# failures (such as "connection refused" and "404 Not Found") are
# negatively-cached for a configurable amount of time. The
# default is 5 minutes. Note that this is different from
# negative caching of DNS lookups
状态:
TCP_NEGATIVE_HIT
在对原始服务器的请求导致HTTP错误时,Squid也会cache这个响应。在短时间内对这些资源的重复请求,导致了否命中。 negative_ttl指令控制这些错误被cache的时间数量。请注意这些错误只在内存cache,不会写往磁盘。下列HTTP状态码可能导致否定 cache(也遵循于其他约束): 204, 305, 400, 403, 404, 405, 414, 500, 501, 502, 503, 504。
TCP_MEM_HIT
Squid在内存cache里发现请求资源的有效拷贝,并将其立即发送到客户端。注意这点并非精确的呈现了所有从内存服务的响应。例如,某些cache在内存里,但要求确认的响应,会以TCP_REFRESH_HIT, TCP_REFRESH_MISS等形式记录。
TCP_IMS_HIT
客户端发送确认请求,Squid发现更近来的、貌似新鲜的请求资源的拷贝。Squid发送更新的内容到客户端,而不联系原始服务器。
-----------------------------------
通过域名访问 返回 400错误,通过ip地址访问没问题
查看squid 日志发现 TCP_NEGATIVE_HIT/400 错误
由于squid 默认设置 会缓存错误页面,主要用来防止服务不可用攻击
修改配置文件
negative_ttl 1 second
暂时解决问题
squid/缓存 | 评论:0
| Trackbacks:0
| 阅读:1095
Submitted by admin on 2012, March 13, 3:43 PM
linux | 评论:0
| Trackbacks:0
| 阅读:804
Submitted by admin on 2012, March 12, 6:27 PM
if(preg_match("/^[0-9a-zA-Z]{3,12}$/",$variable)){
echo "<script>alert('只能是英文字母或数字, 且长度必须是3-12个字');history.back(-1);</script>";die;
}
//其实判断是否是字母和数字或字母数字的组合还可以用PHP ctype_alnum函数
if(!ctype_alnum($vipurl)){
echo '只能是字母或数字的组合';exit;
}
顺便复习下ctype functions
1.ctype_alnum(string $text)://不用说了,检查是否是字母或数字或字母数字的 组合
2.ctype_alpha(string $text):check for alphabetic character(s) //检查字符串是否是字母
3.ctype_cntrl(string $text):check for control character(s) //是否是控制字符如\n,\r,\t
4.ctype_digit(strint $text):check for numeric character(s) //是否是数字表示的字符
大多数时也许应该用is_numeric
这个要特别注意与is_numeric()的区别
例:$numeric_string='42';
$interger = 42;
ctype_digit($numeric_string);//true
ctype_digit($interger);//false
is_numeric($numeric_string); //true
is_numeric($interger); //true
5.ctype_graph(string $text):Check for any printable character(s) except space
6.ctype_lower():check for lowercase character(s)//检查是否是小写字母
7.ctype_upper():check for uppercase character(s)//检查是否是大写字母
8.ctype_space: check for whitespace character(s)//是否是空白字符
9.ctype_xdigit: check for character(s) representing a hexadecimal digit//检查是否是十六进制数字
php | 评论:0
| Trackbacks:0
| 阅读:1136
Submitted by admin on 2012, March 10, 6:04 PM
通常Web服务器都会通过gzip压缩来减少用户下载的流量,提高页面打开速度。
gzip压缩分为两种,http1.0压缩和http1.1压缩,这两种压缩的压缩方法和response header都一样,只是客户端和服务器通讯的http协议不同。
Squid2.7之前,是不支持http1.1的。在2.7版本开始,有限支持http1.1。从3.0版本开始,才完整的支持http1.1。但是因为squid3是完全重构的,很多2.7的功能并没有加到3.0当中,所以squid3并没有被大规模的应用在生产系统中,基本上都还是使用 squid2.6或2.7来进行内容加速,所以需要搞定Squid支持各种Web服务器的HTTP1.0 GZIP压缩。
具体配置:
1, 配置Web服务器,支持HTTP1.0压缩
Apache, 默认就支持http1.0压缩,不需要特定配置
IIS, 通过修改MetaBase.xml第三段IIsCompressionSchemes中的
* HcNoCompressionForHttp10="TRUE"
* HcNoCompressionForProxies="TRUE"
* HcNoCompressionForRange="FALSE"
将HcNoCompressionForHttp10="TRUE" 修改为FALSE
Nginx, 修改nginx.conf中的gzip_version配置项,修改为gzip_version http1.0;
配置后,再发http1.0的压缩请求到nginx,就能够获得压缩后的内容。
2, 配置Squid,支持对http1.0压缩内容的缓存
首先,将cache_vary设置成on。使squid能够缓存带有vary头的内容
然后,将broken_vary_encoding设置成all。squid.conf.default中,这个参数的示例是
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
这个挺有趣,我理解这个参数应该是很早加入的,那时候web服务器还是apache一家的天下。所以作者直接就写了一个allow apache,并一直沿用至今。
这个参数是针对那些压缩前和压缩后etag完全一致的web服务器,让squid通过vary头来区分压缩和未压缩的内容。事实上,现在 apache已经不需要通过broken_vary_encoding来区分vary头了。Apache会修改经过压缩的内容的etag头, 在原来的etag后面加上-gzip。用来区分压缩和非压缩内容。而其他的web服务器都没有这样的功能。都需要通过配置 broken_vary_encoding来支持。
通过配置上面两个参数,你就可以配置squid正确的缓存Apache,IIS,Nginx输出的压缩内容。
上面介绍的方法,已经经过实际环境的验证并稳定运行了近一年,没有出现过压缩缓存失效的情况。
squid/缓存 | 评论:0
| Trackbacks:0
| 阅读:908
Submitted by admin on 2012, March 9, 8:59 AM
client_db on
acl client_10 src 192.168.0.0/32
acl maxconnect maxconn 10
http_access deny client_10 maxconnect
-------------------------
查了一下,该错误是因为打开的文件数超过了linux的限制造成的。因此对系统和squid配置文件进行了修改:
1)对系统进行修改,取消对打开文件数的限制。
ulimit -HSn 65535
为了防止重启后失效,在/etc/profile文件中增加该命令。
查看是否生效,使用命令:ulimit -n
2)修改squid配置文件,增加并发数
打开配置文件:gedit ../squid/etc/squid.conf
a) 增加如下内容:acl OverConnLimit maxconn 2000
b) 将以前的设置"http_access deny all" 修改为 "http_access allow all"
squid/缓存 | 评论:0
| Trackbacks:0
| 阅读:971
Submitted by admin on 2012, March 6, 6:28 PM
13.3 store.log
store.log记录Squid关于存储或删除cache目标的决定。对每个存在cache里的目标、每个不可cache的目标、以及每个被轮换策略删除的目标,Squid都会创建相应的日志条目。该日志文件内容既包含了内存cache又包含了磁盘cache。
store.log提供了下述不能从access.log获取的内容:
- 1)某个特定的响应是否被cache。
- 2)cache目标的文件号。对UFS基础的存储机制,你可转换该文件号到路径名,并且检查cache文件的内容。
- 3)响应的内容长度:包括Content-Length值和实际的body大小。
- 4)Date, Last-Modified, 和Expires头部的值。
- 5)响应的cache关键字(例如MD5哈希值)。
如你所见,这些都是相对低级的信息,在日常管理中可能用不上。除非你要做专业的分析,或打算debug某程序,否则store.log可有可无。可以如下来禁止它:
cache_store_log none
跟其他日志文件一样,Squid将最新的日志条目写到该文件的末尾。某个给定的URI可能出现在日志文件里多次。例如,它先被cache,然后删除,接着又cache住。仅仅最近来的日志条目才反映目标的当前值。
store.log是文本基础的,看起来如下:
1067299212.411 RELEASE -1 FFFFFFFF A5964B32245AC98592D83F9B6EA10B8D 206
1067299212 1064287906 -1 application/octet-stream 6840/6840
GET http://download.windowsupdate.com/msdownload/update/v3-19990518/cab...
1067299212.422 SWAPOUT 02 0005FD5F 6F34570785CACABC8DD01ABA5D73B392 200
1067299210 1057899600 -1 image/gif 1125/1125
GET http://forum.topsportsnet.com/shf./images/nav_members1.gif
1067299212.641 RELEASE -1 FFFFFFFF B0616CB4B7280F67672A40647DD08474 200
1067299212 -1 -1 text/html -1/67191
GET http://www.tlava.com/
1067299212.671 RELEASE -1 FFFFFFFF 5ECD93934257594825659B596D9444BC 200
1067299023 1034873897 1067299023 image/jpeg 3386/3386
GET http://ebiz0.ipixmedia.com/abc/ebiz/_EBIZ_3922eabf57d44e2a4c3e7cd234a...
1067299212.786 RELEASE -1 FFFFFFFF B388F7B766B307ADEC044A4099946A21 200
1067297755 -1 -1 text/html -1/566
GET http://www.evenflowrocks.com/pages/100303pic15.cfm
1067299212.837 RELEASE -1 FFFFFFFF ABC862C7107F3B7E9FC2D7CA01C8E6A1 304
1067299212 -1 1067299212 unknown -1/0
GET http://ebiz0.ipixmedia.com/abc/ebiz/_EBIZ_3922eabf57d44e2a4c3e7cd234a...
1067299212.859 RELEASE -1 FFFFFFFF 5ED2726D4A3AD83CACC8A01CFDD6082B 304
1066940882 1065063803 -1 application/x-javascript -1/0
GET http://www.bellsouth.com/scripts/header_footer.js
每个日志条目包含如下13个域:
squid/缓存 | 评论:0
| Trackbacks:0
| 阅读:1043