历史回顾
网页加速的原理源远流长,最著名的是yahoo的那个《Yahoo! 网站性能最佳体验的34 条黄金守则》,基于此思想,诞生了两个比较有名的网站优化工具,YSlow和Page Speed,它们都系出名门,前者出自Yahoo,后者出自Google,这里我们只谈论pagespeed,它最初是作为Apache的一个网页加速模块mod_pagespeed来使用的,因为性能优越,目前已经被移植到nginx上面,称为nginx_pagespeed
https://github.com/pagespeed/ngx_pagespeed
demo展示页面
http://ngxpagespeed.com/ngx_pagespeed_example/
另外,它也有一个中国版本的远亲,淘宝的开源项目Tengine上也有这个模块的部分移植
http://tengine.taobao.org/
另外,我注意到ATS中也有一个类似的插件, 参见
https://github.com/apache/trafficserver/tree/master/plugins/experimental/ats_pagespeed
http://www.atspagespeed.com/
源码在ats的最新代码plugins/experimental/ats_pagespeed中都有
https://github.com/apache/trafficserver
下面我们只讨论ats_pagespeed这个模块,并在ATS 5.3.0上对它进行简单的安装和测试。我的ATS安装前缀在/opt/ats下面,并非默认的/usr/local
这里仅是记录一下我的实践报告,以作备忘。
相关提示信息在ats_pagespeed源码中的README文件中,需要单独编译安装该动态库ats_pagespeed.so,同时会生成动态库gzip.so
源码修改
如果不加修改,直接编译,你就会发现如下编译错误
编译之前注意修改子目录gzip下的源码
1).在gzip.cc增加一个头文件
#include "ink_defs.h"
同时在Makefile中指出该头文件所在的源码路径
$(TSXS) -I../../../../lib/ts -o gzip.so -v -C *.cc
2).将源码中的ink_defs.h目录复制到ats_pagespeed.cc相同的目录,删除其中max/min的模板定义
cp /usr/local/src/trafficserver-5.3.0/lib/ts/ink_defs.h ink_defs.h
在ink_defs.h中修改#include "ink_config.h"
为
#include "../../../lib/ts/ink_config.h"
修改ats_pagespeed.cc,增加头文件#include "ink_defs.h"
3).配置文件的存放目录在代码ats_pagespeed.cc中被写死为/usr/local/etc/trafficserver/psol,考虑到我们的ats的安装前缀是/opt/ats,而不是默认的/usr/local, 我们需要统一修改为/opt/ats/etc/trafficserver/psol
先查后替换
find ./ -type f | xargs grep "/usr/local/etc/trafficserver"
确定只是ats_pagespeed.cc中需要修改
sed -i "s:/usr/local/etc/trafficserver:/opt/ats/etc/trafficserver:g" ats_pagespeed.cc
编译和安装
make
make install
注意make时会首先下载google的psol静态库包,目前版本是1.8.31.4
配置
在plugin.config中添加如下行
ats_pagespeed.so
gzip.so /opt/ats/etc/trafficserver/gzip.config
创建两个写死的目录
mkdir -p /tmp/ps_log/
mkdir -p /tmp/ats_ps/
ats_pagespeed的配置文件可以任意命名,这里暂定pagespeed.config,它将存放到写死的目录/opt/ats/etc/trafficserver/psol下面,这个文件夹下面的文件会被监视,当更新时会自动重载
mkdir -p /opt/ats/etc/trafficserver/psol
cd /opt/ats/etc/trafficserver/psol
vim pagespeed.config
下面是pagespeed.config的内容
#[host]
[10.10.110.162]
#Force traffic server to cache all origin responses
override_expiry
pagespeed FlushHtml on
pagespeed RewriteLevel CoreFilters
pagespeed EnableFilters rewrite_domains,trim_urls
pagespeed MapRewriteDomain http://10.10.110.162 http://www.foo.com
pagespeed MapOriginDomain http://10.10.110.162 http://www.foo.com
pagespeed EnableFilters prioritize_critical_css,move_css_to_head,move_css_above_scripts
pagespeed EnableFilters fallback_rewrite_css_urls,insert_img_dimensions,lazyload_images,local_storage_cache
pagespeed EnableFilters prioritize_critical_css,rewrite_css
pagespeed EnableFilters combine_javascript,combine_css
这里ip是运行ATS主机的ip,请根据实际情况修改。
下面是gzip.config配置文件的内容(可以参考ats_pagespeed/gzip目录下面的同名文件)
enabled true
remove-accept-encoding false
cache true
compressible-content-type text/*
#compressible-content-type image/*
compressible-content-type *javascript*
在records.config中设置
CONFIG proxy.config.url_remap.pristine_host_hdr INT 0
日志
打开调试日志,要求包含这些调试标志
ats_pagespeed* ats-speed, ats-speed-vlog
在records.config中配置如下:
CONFIG proxy.config.diags.debug.enabled INT 1
CONFIG proxy.config.diags.debug.tags STRING regex_revalidate.*|background_fetch.*|ats*
下面是部分日志截图
测试
打开新浪测试
http://finance.sina.com.cn/china/20150530/140422307455.shtml
还是发现个别块出现编码错误的问题,和原来的版本基本没有区别
后续工作
(待续)
参考文献
[1].https://developer.yahoo.com/performance/rules.html 英文版
[2].http://blog.csdn.net/xiaojianpitt/article/details/4393951 中文版