Published July 12th, 2006 in Tech
贡献最近研究lighttpd的一个小成果:让mod_accesslog 支持COOKIE格式已经把访问日志发送到udp server的功能。
增加的控制参数是:accesslog.udpaddr = "10.1.1.1:6789″ # 格式 "ip:port"
accesslog.udpaddr可和accesslog.filename共存,也就是说能写访问日志到本地,同时也能用udp发送访问日志。
access.format 可以用COOKIE了,举例如下:
accesslog.format = "%h %l %u %t \"%m http://%v%U %H\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{my_uniq_ckid}C\""
显示正文 »
生成的访问日志类似:
172.16.204.4 - - [12/Jul/2006:10:14:53 +0800] "GET http://lighttpd.xxxx.com/apache_pb.gif HTTP/1.1″ 200 2326 "http://lighttpd.xxxx.com" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; GOSURF; .NET CLR 1.1.4322; InfoPath.1)" "172.16.204.4_1139127163_330131086″
跟踪用户的cookie可用mod_usertrack生成。
补丁下载
Keywords:
lighttpd补丁,
优化,
COOKIE,
UDP,
mod_accesslog,
访问日志
Published June 15th, 2006 in Tech
Squid有三个和保持连接相关的配置参数:client_persistent_connections, server_persistent_connections, persistent_request_timeout,缺省client_persistent_connections 和 server_persistent_connections是打开的。
显示正文 »
运行squidclient -p80 mgr:pconn的结果一般是:
Client-side persistent connection counts:
req/
conn count
---- ---------
0 41388
1 4614958
Server-side persistent connection counts:
req/
conn count
---- ---------
1 739509
2 99170
3 20429
4 5469
client_persistent_connections: 是否打开要看具体应用,反正我是一般不开的,因为现在的IE都是多线程的;打开client_persistent_connections的效果可以通过squidclient -p80 mgr:pconn监控。
server_persistent_connections对于静态文件型squid,最好打开,也别忘记把后面apache或其它web server的KeepAlive打开;动态服务要随机应变。
persistent_request_timeout 用缺省值基本没问题。
Keywords:
Squid,
优化
Published June 15th, 2006 in Tech
range_offset_limit主要用在优化各种多线程下载攻击和在线流媒体播放下的squid,缺省是0,也就是说只要client发过来的http header里包含了“Range:” ,squid会把这个请求转到后端http server,最致命的是,http server返回的内容并不会进入squid的cache store。
在squid刚启动时,cache store并没有多少内容,而多线程的HTTP下载又不能cache,这样会导致squid的命中率很低,squid效率差。range_offset_limit就派上用场了,把它的值设置为-1;然后squid会把Range头去掉,而从后端http server把内容全部抓下来,放到cache store里,随后的对该cache的访问就不再转发到后端http server,大大提高命中率。
range_offset_limit设置成-1后,squid的hit rate统计可能会显示负数,是个bug,等squid把大部分后端http server的内容放到cache store后(比如1~2天),把range_offset_limit改成0,统计数据就会显示正常了。呵呵
Keywords:
squid,
range_offset_limit,
优化
Published June 3rd, 2006 in Tech
上个补丁只提供了从udp server读ip的acl,小尹同学启发我为什么不做个写ip到udp server的acl呢?于是就有了第二个补丁(本补丁包含了第一个补丁)。
补丁下载
新提供的acl是 srcip_write2udp,参数和srcip_udp 一样。srcip_write2udp总返回1,并把连接squid的ip地址发到udp server里,随后的srcip_udp就允许该ip的访问了。
通过中间的udp server,就可以多个squid共享允许ip数据,因此也支持多台squid做负载均衡。
显示正文 »
这个功能比较怪,下面讲讲如何使用吧。
举例:只允许访问过html文件的ip访问mp3文件:
acl html url_regex -i \.html$
acl mp3 url_regex -i \.mp3$
acl dopermit srcip_write2udp 127.0.0.1 20000
acl permitedip srcip_udp 127.0.0.1 20000
http_access allow html dopermit
http_access allow mp3 permitedip
欢迎提问,呵呵
Keywords:
Squid,
补丁,
patch,
优化
Published June 2nd, 2006 in Tech
squid的src acl 只能写固定的ip列表,srcip_udp acl 补丁扩展了src acl功能。srcip_udp 从指定的udp server检查访问squid的ip是否存在,存在则返回1,否则返回0。为减少udp请求的量,srcip_udp记录了udp server返回1的ip缓存,缓存过期时间缺省是30分钟。srcip_udp使用方法如下:
srcip_udp ip port expires
ip是udp server的ip;port是udp server listen的端口;expires是缓存过期时间,可以不写,缺省过期时间1800秒(30分钟)。
srcip_udp acl 需要UDP server,我写了个简单udp server。该udp server里记录的ip过期时间是1小时,不合适可自行修改代码,代码使用libevent库;如果没有libevent,把Makefile中-DHAVE_LIBEVENT删除,然后运行make nolibevent。
补丁下载
UDP Server 下载
显示正文 »
以上代码都使用了
memcached里的hash函数,非常感谢Brad优秀代码。
使用举例:
squid.conf 中写上
acl myclient srcip_udp 127.0.0.1 20000
http_access allow myclient
确保运行squidudp server。
下面的php代码可以让访问该php的ip允许访问squid。
if(isset($_SERVER['REMOTE_ADDR'])) {
$socket = fsockopen("udp://127.0.0.1", 20000, $errno, $errstr);
if ($socket) {
$buf = sprintf("ADD %s\n", $_SERVER['REMOTE_ADDR']);
fwrite($socket, $buf, strlen($buf));
echo $_SERVER['REMOTE_ADDR']." ".fread($socket, 26);
fclose($socket);
} else {
echo "ERROR: $errno - $errstr
\n";
}
}
?>
Keywords:
Squid,
补丁,
patch,
优化