squid的重定向,我看网上一般都采用 redirect_children
(即 url_rewrite_children
)。估计是因为中文权威指南的原因吧。不过中文权威指南还是2.5版的时候出的。有些新东西没有。比如 squid.conf.default
中提供的另一种 url_rewrite_concurrency
。
继续阅读……
08 Apr 2010 Posted in squid
squid的重定向,我看网上一般都采用 redirect_children
(即 url_rewrite_children
)。估计是因为中文权威指南的原因吧。不过中文权威指南还是2.5版的时候出的。有些新东西没有。比如 squid.conf.default
中提供的另一种 url_rewrite_concurrency
。
继续阅读……
03 Apr 2010 Posted in bash
今天看同事的一个备份脚本,在取昨天的日期时,采用了YESTERDAY_NAME=date -I -d'-1 day' +"%Y-%m-%d"
的方法。
继续阅读……
02 Apr 2010 Posted in linux
曾经有过一组高并发请求的服务器,在lvs上看到单台 activeconn 约等于 220000;同时,在RS上执行 netstat -s -t|grep "connections established"
结果大概是 65000,而 squidclient mgr:5min|grep client_http.requests
结果却只有 180。后来说起并发数的时候,有些茫然,到底哪个才算是呢?
继续阅读……
30 Mar 2010 Posted in CDN
squid的purge,一般有两种方式,squidclient -m purge url或者http request (method)purge url。如果任务不太多的情况下,直接使用squidclient -p 80 -h 1.2.3.4 -m purge url即可。如果任务比较繁重的情况下,telnet80后直接发送purge请求稍微好一些。作为初学perl的练手,写一个purge脚本。如下: 继续阅读……
28 Mar 2010 Posted in CDN
因为这么一个想法,我陆陆续续的把squid很多功能都理了一遍,今天终于打算写个不完美的终结篇。而就在写这个终结篇的同时,公司里也已经开始把这批别扭的客户改往nginx平台加速了。 继续阅读……
24 Mar 2010 Posted in monitor
同样作为提供web服务的机器,因为不同业务的关系,除了流量以外,还需要参考TCP80连接数来分析服务器性能状况。下面就试试cacti对连接数的监控。 最简单的方法,利用snmpnetstat这个命令,自动搞定一切。cactiuser.org上提供一个现成的模板,只要import就能直接用。下载地址如右:http://www.iammecn.com/wp-content/uploads/2009/12/cacti_graph_template_snmp_connections.zip 继续阅读……
24 Mar 2010 Posted in nginx
今天发现nginx做多域名混跑的proxy_cache时有一个小问题:当一个非加速server_name的请求到达的时候,nginx不会像squid那样返回一个ERR_DNS_FAIL,反而假装很正常的返回一个页面: 继续阅读……
21 Mar 2010 Posted in CDN
flash和flex应该是现在网络上红到发紫的技术了,要flv不要tv,要sns不要bbs,连春晚节目都满嘴偷菜~~~我也试着用用fms3.5,一些基本搭建,过过瘾,免得自己太过OUT了。
fms是adobe的付费产品,不过不花钱买序列号,也可以用免费的开发版,限制是10个链接而已。上www.adobe.com注册一个帐号,就可以下载了。下载下来的zip中包含了win版的exe和linux版的tar.gz。网上教程大多是win的,不过不要紧,除了字符和图形,真正使用上没啥区别。
上传FlashMediaServer3.5.tar.gz到linux服务器上,解压开,./installFMS -platformWarnOnly,然后按提示,设定安装目录、管理员帐号密码、监听端口、是否安装自带的apache2.2.9,是否设为守护进程等,最后完成。
ps看看,已经有几个fms的进程了吧;netstat看看,也有1935/19350/1111端口的监听吧(前提是你没改),OK了。
注:这里有几个问题。如果install的时候,端口选择了默认的1935,80,而本身服务器上又开着httpd的80,就会有冲突;这时候关掉FMSHttpd是不够的,因为fmsedge也监听这80端口,需要在conf/fms.ini中,把SERVER.HTTPD_ENABLED设为false,再删除ADAPTOR.HOSTPORT里的80,然后/etc/init.d/fms restart,这样就可以了。
继续阅读……
17 Mar 2010 Posted in squid
今天在 squid 服务器上,无意看到一个让我无比惊讶的访问日志,随后一统计,同样的日志居然还不在少数,…… 继续阅读……
16 Mar 2010 Posted in web
#!/usr/bin/perl -w
use String::CRC32;
my $url = shift;
my @peer = ('10.13.12.14:80',
'10.13.12.15:80',
'10.13.12.16:80',
'10.13.12.17:80',
'10.13.12.18:80');
my $new = 9999999999;
my $sum = $#peer+1;
my $uricrc = crc32("$url",length($url));
for (my $i=0;$i<$sum;$i++) {
my $peercrc = crc32($peer[$i],length($peer[$i]));
my $res = $peercrc - $uricrc;
if ($res > 0 && $res < $new){
$new = $res;
$haha = "$i\t$new";
}
}
my @num = split(/\t/,$haha);
printf("%s cached at the %s peer by the key %010.0f.\n",$url,$peer[$num[0]],$uricrc);
_END_
测试如下: 继续阅读……
15 Mar 2010 Posted in web
今天继续看nginx的consistent_hash_module,因为想可能的话可以把url和对应的peer关系查出来,形成一个类似squidclient一样的方式。以下内容都是我从百度、谷歌、nginx模块应用指南和ngx_upstream_consistent_hash_module的src中自我理解得出的,欢迎指正。 继续阅读……
13 Mar 2010 Posted in nginx
回到nginx的cache_store方式上来。这是传统的nginx缓存方式,配置一般如下: 继续阅读……
13 Mar 2010 Posted in nginx
刚才发现使用perl_set忽略大小写,完全不用perl_module和perl_require那么兴师动众,同样也能达到不错的效果。比如这个用perl做伪静态路径的例子。随即就动手试验一下。 继续阅读……
13 Mar 2010 Posted in nginx
想找找解决不同client请求中文url产生多份cache的办法,结果在nginx的maillist里看到也有人问《rewrite to lowercase?》下面有人回答了这个问题,做法和我一样~~呵呵。随后他也附上了这种做法的思路和问题。 继续阅读……
11 Mar 2010 Posted in nginx
作为一个web服务器,我们已经习惯了nginx的类apache日志,即$status。其实nginx的upstream模块下,带有几个变量,却是类squid日志的。他们是: 继续阅读……
11 Mar 2010 Posted in nginx
看了看nginx的perl_module,差不多知道了个大概。 在nginx.conf的http域中,通过perl_modules指定模块路径,perl_require指定模块名称;location域中通过perl引用函数。 引用对象为$r->**,列举一下主要的参数: ·$r->args - 返回请求的参数。 ·$r->discard_request_body - 告诉nginx忽略请求主体。 ·$r->filename - 更具URI的请求返回文件名。 $r->has_request_body(function) - 如果没有请求主体,返回0,但是如果请求主体存在,那么建立传递的函数并返回1,在程序的最后,nginx将调用指定的处理器。 ·$r->header_in(header) - 检索一个HTTP请求头。 ·$r->header_only - 在我们只需要返回一个应答头时为真。 ·$r->header_out(header, value) - 设置一个应答头。 ·$r->internal_redirect(uri) - 使内部重定向到指定的URI,重定向仅在完成perl脚本后发生。 ·$r->print(args, …) - 为客户端传送数据。 ·$r->request_body - 在请求主体未记录到一个临时文件时为客户返回这个请求主体。为了使客户端的请求主体保证在内存里,可以使用client_max_body_size限制它的大小并且为其使用的缓冲区指定足够的空间。 ·$r->request_body_file - 返回存储客户端需求主体的文件名,这个文件必须在请求完成后被删除,以便请求主体始终能写入文件,需要指定client_body_in_file_only为on。 ·$r->request_method - 返回请求的HTTP动作。 ·$r->remote_addr - 返回客户端的IP地址。 ·$r->rflush - 立即传送数据到客户端。 ·$r->sendfile(file [, displacement [, length ] ) - 传送给客户端指定文件的内容,可选的参数表明只传送数据的偏移量与长度,精确的传递仅在perl脚本执行完毕后生效。 ·$r->send_http_header(type) - 为应答增加头部,可选参数“type”在应答标题中确定Content-Type的值。 ·$r->sleep(milliseconds, handler) - 设置为请求在指定的时间使用指定的处理方法和停止处理,在此期间nginx将继续处理其他的请求,超过指定的时间后,nginx将运行安装的处理方法,注意你需要为处理方法通过一个reference,在处理器间转发数据你可以使用$r->variable()。 ·$r->status(code) - 设置HTTP应答代码。 ·$r->unescape(text) - 以%XX的形式编码text。 ·$r->uri - 返回请求的URI。 ·$r->variable(name[, value]) - 返回一个指定变量的值,变量为每个查询的局部变量。 继续阅读……
09 Mar 2010 Posted in squid
在配置squid.conf的refresh_pattern或者url_regex的时候,我们习惯性的都会加上一个options:“-i”,用于忽略大小写。 前不久配置nginx.conf的location时,也用上了~*忽略大小写。 但是这个“忽略大小写”,其实只是整个请求处理流程中部分过程——配置规则的匹配过程——中的忽略。 在使用了这些options以后,一个http://www.test.com/a.htm和另一个http://www.test.com/A.HTM请求在到达squid/nginx的时候,会统一无视大小写的进行规则匹配,然后可能proxy_pass到oringin获取数据;接下来有两种情况: oringin是windows主机,不区分大小写,返回200数据,缓存下来——分别是a和A两份! oringin是类unix主机,区分大小写,返回一个正确的200,一个错误的404……甚至可能两个都404~~ (根据测试,完整的url中,host是不用区分大小写的,url_path里的大小写才有影响) 如果要让同样的内容就缓存一份数据,我想就只能在squid/nginx内核在处理url之前,将url的大小写问题处理掉。 继续阅读……
07 Mar 2010 Posted in bash
前两天做监控的小脚本,其实只是采集几个数据,再调用了一个现成的perl大脚本发送出来,最后归入了monitor类别,没好意思放进shell类别里。 继续阅读……
07 Mar 2010 Posted in nginx
nginx的类squid哈希式cache功能,据张宴说是基本稳定可用了,昨天找个机会和时间,试着测用了一把,把要点记录一下: 继续阅读……
03 Mar 2010 Posted in nginx
话接上篇,采用consistent方式进行url_hash负载均衡。 继续阅读……