在UCenter头像系统中,使用机制是这样的通过 “GET /uc_server/avatar.php?uid=2890313&size=middle HTTP/1.1″这样的方式调用然后avatar.php转换为”/data/avatar/002/89/03 /13_avatar_middle.jpg”这样的地址并发送301重定向请求,这个有很大问题.
第一,服务器的头像连接会增加一倍,就算浏览器有缓存,那也是不小的流量.
第二,用户浏览器并发限制默认为2有些修改成了5,也就是说IE只能同时打开2|5个请求服务器上的问题,头像在论坛首页,帖子中以及短信中的频繁应用,这样就会延迟页面其他元素打开的时间
第三,服务器每个Apache连接会占用一定的内存空间,这样服务器因为连接数增加消耗的内存也有所增加
朋友找到我的时候我做出了以上的分析,本来打算给他换nginx+FastCGI,但是人懒了,没给他换,直接装了mod_XSendfile
下载mod_xsendfile;
引用:
apxs2 -cia mod_xsendfile.c
引用:
LoadModule xsendfile_module modules/mod_xsendfile.so
然后我们修改apache22的httpd-vhosts.conf 在这个虚拟主机中加入
代码:
<files avatar.php>
XSendFile on
XSendFileAllowAbove on
</files>
最后修改avatar.php文件
第一 找到
代码:
header("HTTP/1.1 301 Moved Permanently");
修改为
代码:
header("Content-Type:image/png");
第二 找到
代码:
header('Location: '.UC_API.'/'.$avatar_url);
修改为
代码:
header("X-Sendfile: ".$avatar_url);
搞定..你会发现,10万PV的论坛这样修改是很有必要的