在类unix主机上,文件系统是区分大小写的,但在网络上却需要忽略大小写,比如一些网友上传照片的时候,图片后缀名一般是大写的。这将会导致我们前端缓存服务无法缓存或进行重复缓存,影响效率。
如果使用nginx,在配置location时,可以用~*忽略大小写,例如:
location ~* \.(ftpquota|htaccess|htpasswd)?$ { # ~*表示忽略大小写
deny all;
}
配置squid的acl时,可以用-i忽略大小写,例如:
acl domain dstdomain -i icodex.org (-i表示忽略大小写)
http_access deny domain
而在varnish的vcl语法中,可以用(?i)的正则表达式忽略大小写,例如:
if (req.http.referer !~ "(?i)icodex.org") { # (?i)表示忽略大小写
error 404;
}
[技巧]让varnish 忽略大小写
"not responding to CLI, killing it."
最近帮忙维护的一台镜像服务器出现了点问题,上面跑的varnish无规律地出现重启,导致缓存的内容全部被删除。出错log一般是这样的:
Mar 30 09:14:07 Cache-Node1 varnishd[15295]: Child (15297) not responding to CLI, killing it.
Mar 30 09:14:25 Cache-Node1 last message repeated 3 times
Mar 30 09:14:25 Cache-Node1 varnishd[15295]: Child (15297) died signal=3
Mar 30 09:14:25 Cache-Node1 varnishd[15295]: child (16153) Started
Mar 30 09:14:28 Cache-Node1 varnishd[15295]: Child (16153) said Child starts
Mar 30 09:14:28 Cache-Node1 varnishd[15295]: Child (16153) said SMF.s0 mmap'ed 2147483648 bytes of 2147483648
而此时iostat反应的%iowait也非常高,数值达到了80+,%idle仅剩下10不到。
varnish如果运行在磁盘IO非常繁忙的服务器上,整体效能将会非常糟糕。也没有太好的办法去解决这一问题,只能做一些外围的优化。优化主要是两个方面,一个是调整varnish的cli_timeout值,我将其调整为cli_timeout = 60;另一方面需要调整系统sysctl优化vm内核,调整脏页写回到磁盘的值,我设定的值是:
vm.max_map_count = 65536
vm.swappiness = 60
vm.dirty_ratio = 60
vm.dirty_writeback_centisecs = 200
vm.dirty_background_ratio = 60
vm.dirty_expire_centisecs = 5000
还有一条适用于CentOS 5,禁止刷新mmap页,但这个选项同样存在风险,慎用。另外 CentOS 6系列没有该项调整。
vm.flush_mmap_pages = 0
最后一条:强烈建议varnish运行在CentOS 5.x 64bit,磁盘IO不是很繁忙的环境中。
附一份 Varnish 指南pdf,下载地址:http://dl.icodex.org/Varnish-guide-V1.0.pdf
香港 38cloud.com VPS 介绍
本次介绍香港本土的运营商38cloud.com,母公司uniforce.net,提供的频宽相当不错,单台VPS提供10M国际出口带宽(到国内也计算国际流量),并且不限制传输产生的流量。非常适合为国内或亚太地区提供电子商务或需要小型镜像加速服务的用家使用。具体的频宽可参见:http://www.38cloud.com/faq/your-vps-internet-speed-slow
VPS是kvm架构,可自己安装想要的操作系统(需提交ticket)。控制面板相对简陋很多,但平时使用的功能也不多,整站似乎是用drupal写的。控制面板截图如下:
付款后选择欲安装的操作系统(建议选择64bit的操作系统),大概等15分钟即可安装完毕,建议直接选用官方提供的系统,安装完之后一定要查看FAQ,比如登陆系统,需要用权限较低的普通用户(user1/user1)登陆,然后进入系统之后su到root权限(默认密码为password)才能正常使用,如果需要开启root直接登陆,首先要修改root密码,然后修改sshd_config中的PermitRootLogin yes。
