忽略大小写(nginx)

13 Mar 2010 Posted in  nginx

刚才发现使用perl_set忽略大小写,完全不用perl_module和perl_require那么兴师动众,同样也能达到不错的效果。比如这个用perl做伪静态路径的例子。随即就动手试验一下。 继续阅读……


忽略大小写(刚在nginx的maillist看到的)

13 Mar 2010 Posted in  nginx

想找找解决不同client请求中文url产生多份cache的办法,结果在nginx的maillist里看到也有人问《rewrite to lowercase?》下面有人回答了这个问题,做法和我一样~~呵呵。随后他也附上了这种做法的思路和问题。 继续阅读……


nginx日志(upstream)

11 Mar 2010 Posted in  nginx

作为一个web服务器,我们已经习惯了nginx的类apache日志,即$status。其实nginx的upstream模块下,带有几个变量,却是类squid日志的。他们是: 继续阅读……


忽略大小写(nginx|apache)

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]) - 返回一个指定变量的值,变量为每个查询的局部变量。 继续阅读……


忽略大小写(squid)

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的大小写问题处理掉。 继续阅读……


ASUS-EeePC-1005HA

08 Mar 2010 Posted in 

去年参加华硕服务器平台搭建大赛得了二等奖,延误了这么久,终于把奖品拿到手了—-一台上网本.赶紧开始试用. 继续阅读……


awk收发邮件小脚本

07 Mar 2010 Posted in  bash

前两天做监控的小脚本,其实只是采集几个数据,再调用了一个现成的perl大脚本发送出来,最后归入了monitor类别,没好意思放进shell类别里。 继续阅读……


nginx的proxy_cache和cache_purge模块试用记录

07 Mar 2010 Posted in  nginx

nginx的类squid哈希式cache功能,据张宴说是基本稳定可用了,昨天找个机会和时间,试着测用了一把,把要点记录一下: 继续阅读……


nginx负载均衡(consistent_hash、error_page)进阶

03 Mar 2010 Posted in  nginx

话接上篇,采用consistent方式进行url_hash负载均衡。 继续阅读……


服务器监控报警小脚本(shell+sendEmail)

03 Mar 2010 Posted in  monitor

这种email报警脚本遍地都是,很多用的sendmail、postfix,感觉有些大材小用了;也有些用perl的NET::SMTP和Authen::SASL模块发信的,不过我perl用的不好,老发出些莫名其妙的邮件来(比如if(a>1){print(a);},最后邮件里的显示的是0.99……);最后采用sendEmail这个成型的perl程序发信报警,而实时监控部分回归shell,终于完成。 继续阅读……


nginx负载均衡(url_hash)配置

02 Mar 2010 Posted in  nginx

nginx是著名的非专职全七层负载均衡器,在用惯了四层LVS后,终于碰上了麻烦:LVS后端的4台RS磁盘都较小(20G),跑不到一天就塞满了东西;而根据预估,实际上一天时间该节点也就只有20G的文件增长。很显然,因为lvs转发的轮询算法,导致RS重复缓存了相同的文件。 继续阅读……


wordpress部署时碰到的php小问题~

25 Feb 2010 Posted in  web

看到windows live writer也支持wordpress,感觉这个博客系统确实流行,决定自己也试一把~install时,出了点问题,选择好sqlname和user、passwd信息后,另存为wp-config.php,next生成管理账户和密码的页面,居然顶上出现了“Warning: Cannot modify header information - headers already sent by …”,无视之,记下随机密码,下一步login——彻底废了,整个页面都是这个warning提示~~ 继续阅读……


memcached部署

25 Feb 2010 Posted in  web

wget http://www.monkey.org/~provos/libevent-1.4.13-stable.tar.gz
wget http://memcached.googlecode.com/files/memcached-1.4.4.tar.gz
wget http://pecl.php.net/get/memcache-2.2.5.tgz
tar zxvf libevent-1.4.13-stable.tar.gz
tar zxvf memcached-1.4.4.tar.gz

cd libevent-1.4.13-stable
./configure --prefix=/usr
make
make install
ln -s /usr/lib/libevent-1.4.so.2 /usr/lib64/libevent-1.4.so.2

cd memcached-1.4.4
./configure --prefix=/home/memcached --enable-64bit
make
make install
/home/memcached/bin/memcached -d -m 1024 -p 11211 -u root

参数说明: -d 启动为守护进程 -m 分配给Memcached使用的内存数量,单位是MB,默认为64MB -u 运行Memcached的用户,仅当作为root运行时 -l 监听的服务器IP地址,默认为环境变量INDRR_ANY的值 -p 设置Memcached监听的端口,最好是1024以上的端口 -c 设置最大并发连接数,默认为1024 -P 设置保存Memcached的pid文件,与-d选择同时使用 继续阅读……


cacti安装记录

24 Feb 2010 Posted in  monitor

cacti运行在lamp环境下,采用net-snmp获得监控数据,由rrdtool绘图。所以cacti的安装,主要就是apache、mysql、php、rrdtool、net-snmp这几个的安装。其中apache2是我们服务器上早就有的,可以利用;而原有的php5因为不支持mysql,所以要重新编译。 继续阅读……


shell变量扩展

23 Feb 2010 Posted in  bash

第一种扩展形式,按长度截取:${PARAMETER:OFFSET:LENGTH};例: 继续阅读……


ESI 语言介绍

22 Feb 2010 Posted in  CDN

今天看到一个叫做 ESI 的东东,以此为线索,一路链接下去,颇为有趣,摘抄些新闻/博客段落来,算作长眼了: 继续阅读……


qhttpd

09 Feb 2010 Posted in  web

今天偷菜极不顺利,QQ空间老坏,看着那个Qhttpd的502提示页面就郁闷,决定自己也安一个看看。 http://www.qdecoder.org/qhttpd/download.qsp 话说网上人都说QQ的视频服务器用的是qhttpd,Qzone用的是自己的qzhttpd呀。为啥农场的错误是qhttpd呢? 以上,过完年在说。呵呵 过年回来鸟去韩国下载了qhttpd来看,默认安装配置什么的,真的超级简单——功能也超级简单(连logformat都没有)。如果想要玩出花样来,好吧,从源代码开始,慢慢写C去吧~ 继续阅读……


cache驻留时间(七、Vary)

09 Feb 2010 Posted in  CDN

之前的系列文章,只涉及squid本身,今天突然想到,其实这个网站加速,除了squid缓存这种缩短传输距离的办法以外,还有另一个办法——压缩内容以缩短传输时间。 而糟糕的问题是,squid对压缩内容的缓存,限制多多。因为squid默认是以HTTP/1.0进行内容传输的,对HTTP/1.1协议兼容性不怎么滴一个不小心,browser就会接受到squid交给它的无法理解的内容,并忠实的把这个错乱信息显示给网民……然后你就等着客户投诉电话吧 这个具体的限制就是:squid只支持静态压缩,不支持动态压缩。反应到header上,就是rep_header里必须指明Content-length是多少多少,不能采用Transfer-Encoding: chunked这样的动态块格式;rep_header里必须指明Vary是Accept-Encoding,而不能是其他的User-Agent等等。 继续阅读……


squid运行分析

06 Feb 2010 Posted in  squid

上回编译加载tcmalloc后,效果各有不同,所以还得细分具体运行情况,以便之后继续优化。 之前的架构是1个lvs下挂6台leaf+1台parent。现在已经给7台squid都加载tcmalloc了。leaf运行上佳,CPU占用率甚至降到了2%,loadavg也不过0.2。但parent的CPU占用率虽然降低,loadavg却依然在1以上——这对于单核服务器来说,可不是什么好事。分析日志,或者用squidclient分析cache情况,leaf如下: cat access.log |awk ‘{if(/NONE/){a[NONE]++}}END{print a[NONE]/NR}’ 0.981347 squidclient -p 80 mgr:info Cache information for squid: Request Hit Ratios: 5min: 97.8%, 60min: 98.3% Byte Hit Ratios: 5min: 97.8%, 60min: 98.2% Request Memory Hit Ratios: 5min: 85.8%, 60min: 86.8% Request Disk Hit Ratios: 5min: 9.8%, 60min: 9.1% Storage Swap size: 19891740 KB Storage Mem size: 1048572 KB Mean Object Size: 9.67 KB 可以看到缓存文件的平均大小不足10KB,绝大多数的请求都在内存中处理掉了。所以在加载了优化内存反应速度的tcmalloc后,效果那么明显。 parent如下: $ cat access.log |awk ‘{if(/NONE/){a[NONE]++}}END{print a[NONE]/NR}’ 0.179209 $ squidclient -p 80 mgr:info Cache information for squid: Request Hit Ratios: 5min: 31.1%, 60min: 32.3% Byte Hit Ratios: 5min: 38.4%, 60min: 36.9% Request Memory Hit Ratios: 5min: 7.8%, 60min: 12.2% Request Disk Hit Ratios: 5min: 32.7%, 60min: 37.9% Storage Swap size: 40300232 KB Storage Mem size: 524284 KB Mean Object Size: 11.68 KB 只有30%的缓存命中,而且基本还都是从磁盘读取的(awk结果排除了REFRESH_HIT,所以更低)。难怪上次优化没什么效用了…… 为了保证服务,先给这组服务器加上了round-robin的双parent。新parent的硬件情况和老的一样。而squid配置上,则采用了aufs方式,不再使用diskd方式。运行到现在30个小时,分析如下: $ cat /cache/logs/access.log |awk ‘{if(/NONE/){a[NONE]++}}END{print a[NONE]/NR}’ 0.238754 $ squidclient -p 80 mgr:info Cache information for squid: Request Hit Ratios: 5min: 22.7%, 60min: 22.8% Byte Hit Ratios: 5min: 22.9%, 60min: 20.1% Request Memory Hit Ratios: 5min: 22.2%, 60min: 24.3% Request Disk Hit Ratios: 5min: 64.4%, 60min: 65.0% Storage Swap size: 4640308 KB Storage Mem size: 1048588 KB Mean Object Size: 9.08 KB 继续阅读……


netfilter的conntrack优化

06 Feb 2010 Posted in  linux

参考原文 中文版 说是zz,好歹也是自己看完以后的zz,所以组织语言次序都是自己来: 首先解释两个概念性的名词 继续阅读……


squid加载tcmalloc性能优化测试(编译)

04 Feb 2010 Posted in  squid

话接上文,同一组LVS下,昨天采用重编译方式部署了另一台squid服务器。同样跑上一天,再次对比一番。今天流量比上回稍微少些,未加载的服务器cacti监控截图如下: CPU占用率 ===================== 负载 继续阅读……


squid加载tcmalloc性能优化测试(动态)

01 Feb 2010 Posted in  squid

昨天下午在一台squid上加载了tcmalloc。运行到现在,整整一天时间。现取LVS下与其完全相同配置的另一台未加载tcmalloc的squid服务器进行比较。 环境说明: CPUinfo:Intel(R) Xeon(R) CPU  E5405  @ 2.00GHz MEM:4G SQUID:Version 2.6.STABLE21 当单台流量20M,TCP连接数6w时,未加载tcmalloc的服务器CPU占用率和负载情况如下图: CPU占用率 负载 继续阅读……


squid几个第三方工具

31 Jan 2010 Posted in  squid

GADMIN-SQUID 在linux环境下运行,经本人下载src后看,只能用于本机squid管理,不支持批量…… 继续阅读……


squid加载tcmalloc性能优化测试(原理)

31 Jan 2010 Posted in  squid

TCMalloc(Thread-Caching Malloc)是google开发的开源工具──“google-perftools”中的成员。其作者宣称tcmalloc相对于glibc2.3 malloc(aka-ptmalloc2)在内存的分配上效率和速度有6倍的性能提高,tcmalloc的常用场景是用于加速MySQL,不过据Wikipedia的hacker(Domas Mituzas)说,tcmalloc不仅仅对MySQL起作用,对squid也同样起作用(网上也有很多人在nginx上启用tcmalloc了),不过目前squid并没有official way来使用tcmalloc。 TCMalloc的实现原理和测试报告请见一篇文章:《TCMalloc:线程缓存的Malloc》 那么让我们赶紧给squid加载上tcmalloc,提高cache服务器在高并发情况下的性能,降低系统负载吧。 因为服务器是64位OS,所以要先安装libunwind库。libunwind库为基于64位CPU和操作系统的程序提供了基本的堆栈辗转开解功能,其中包括用于输出堆栈跟踪的API、用于以编程方式辗转开解堆栈的API以及支持C++异常处理机制的API。(又cp一句话,^=^) bashwget http://download.savannah.gnu.org/releases/libunwind/libunwind-0.99.tar.gz tar zxvf libunwind-0.99.tar.gz cd libunwind-0.99/ CFLAGS=-fPIC ./configure make CFLAGS=-fPIC make CFLAGS=-fPIC install 普通的./configure&&make&&make install可不行哟~ 然后开始安装tcmalloc: bashwget http://google-perftools.googlecode.com/files/google-perftools-1.8.1.tar.gz tar zxvf google-perftools-1.8.1.tar.gz cd google-perftools-1.8.1/ ./configure --disable-cpu-profiler --disable-heap-profiler --disable-heap-checker --enable-minimal --disable-dependency-tracking make && make install 然后配置动态链接库,因为是之前是默认安装,这里自然就是/usr/local/lib了。 bashecho "/usr/local/lib" > /etc/ld.so.conf.d/usr_local_lib.conf /sbin/ldconfig 然后给squid加载tcmalloc。官方推荐是重新编译: 先./configure,然后vi src/Makefile,修改如下: 继续阅读……


header_replace试验

31 Jan 2010 Posted in  squid

在linuxtone论坛上,偶见一贴,说采用如下配置,browser就可以正常遵守originserver的过期设置,而且充分利用browser本身的缓存设置,对server来说就可以达到减少304请求的效果,从而提升机器性能,节省带宽云云…… 继续阅读……