[关闭]
@delight 2014-05-02T12:37:06.000000Z 字数 4928 阅读 2005

配置PageSpeed作为正向代理

pagespeed

安装

PageSpeed只能作为apache或nginx的一个模块存在,而如果需要做forward proxy,就只能集成到apache2中 。注意PageSpeed的设计目的主要是作为反向代理供http服务器使用的,如果被用作正向代理,很多特性就不能使用了。

首先从源里安装apache2:sudo apt-get install apache2,12.04 Ubuntu里面对应的版本是2.2,而13.10中则是2.4;接下来可以按照google官方的安装指南来进行pagespeed的安装。

一般情况下,装完mod_pagespeed后,其会自动配置好并加载。这点可以通过检测/etc/apache2/mods-enabled目录下是否存在pagespeed.loadpagespeed.conf来验证,如果没有的话,可以自己使用ln -s ../mods-available/来创建符号链接。

注意:以下配置是以apache2.4为标准的,mod_pagespeed则是使用了最新的稳定版1.6.29.7.

配置apache

我们这里配置apache作为正向代理,可以参考apache的官方指南(2.2中文版2.4英文版)但是注意debian系列的linux的配置和其他版本差别很大,是通过在mods-enabled目录下创建符号链接来实现激活的。这里需要创建proxy.load,proxy.conf,proxy_connect.load,proxy_http.load这几个文件的符号链接。

proxy.load中配置代理相关信息:

  1. #代理开关
  2. ProxyRequests On
  3. #访问控制
  4. <Proxy *>
  5. AddDefaultCharset off
  6. Require all denied
  7. Require local
  8. </Proxy>
  9. ProxyPreserveHost On
  10. ProxyStatus On
  11. ProxyBadHeader Ignore
  12. #允许CONNECT盲转
  13. AllowCONNECT 443
  14. #打开via头部
  15. ProxyVia On
  16. #可以添加下一跳的地址,类似squid的cache_peer parent
  17. #ProxyRemote * http://127.0.0.1:8080

/etc/apache2/apache2.conf中增加ServerName xxx一行,如果没有这个配置,apache2每次启动都会有个相关的warning;在/etc/apache2/ports.conf中配置端口,可以添加以下信息:

  1. <IfModule mod_proxy.c>
  2. Listen 9999
  3. </IfModule>

这样,正向代理的初步配置就完成了,可以使用sudo apache2ctl -t来检测配置是否有误。默认的访问控制是Require local的,只有本地才能连接代理,如果需要做远程测试,记得再加上Require ip myip,可以配置浏览器测试一下能否正常工作。

配置PageSpeed

PageSpeed的功能其实和ziproxy有些重复,主要也是压缩图像、优化html/css/js等文件,另外还有类似squid的控制缓存能力(这个应该来自apache本身)。

PageSpeed的优化选项比较复杂,ziproxy的html优化只是一个黑盒开关,PageSpeed则是一个暴露各种优化细节的白盒,下面是一个可选的配置(参考了这里这里):

ModPagespeedDomain *
ModPagespeedRewriteLevel  CoreFilters

ModPagespeedEnableFilters combine_heads
ModPagespeedEnableFilters combine_javascript
ModPagespeedEnableFilters convert_png_to_jpeg
ModPagespeedEnableFilters convert_jpeg_to_webp
ModPagespeedEnableFilters inline_preview_images
ModPagespeedEnableFilters make_google_analytics_async
ModPagespeedEnableFilters move_css_above_scripts
ModPagespeedEnableFilters move_css_to_head
ModPagespeedEnableFilters prioritize_visible_content
ModPagespeedEnableFilters resize_mobile_images
ModPagespeedEnableFilters sprite_images

#ModPagespeedEnableFilters defer_iframe
ModPagespeedInPlaceResourceOptimization on
ModPagespeedEnableFilters lazyload_images

ModPagespeedCriticalImagesBeaconEnabled false

ModPagespeedJsPreserveURLs on
ModPagespeedImagePreserveURLs on
ModPagespeedCssPreserveURLs on

最安全的办法是使用默认配置,即CoreFilters,可以尽量确保页面加载没有任何问题(这也是默认配置)。PreserveURL那几行是保证URL不被改写,因为用作正向代理时,URL一旦被改写,服务器一定返回403,这3行实际上会关闭上面有些优化选项。Beacon 对服务器的POST一般不会得到应答,也没有开的必要。

有两个比较优势的选项:resize_mobile_images是根据UA自动裁剪图片尺寸;lazyload_images是直到浏览才开始加载图片,前者比较实用,后者则可能有一些争议。不过ziproxy也有优势:可以根据图片大小对ImageQuality进行分段设置,这点pagespeed暂时没提供相关选项(但是有按图片类型的压缩质量分类)。

配置中和图像质量相关的选项包括:

# Settings for image optimization:
#
# Lossy image recompression quality (0 to 100, -1 just strips metadata):
 ModPagespeedImageRecompressionQuality 75
#
# Jpeg recompression quality (0 to 100, -1 uses ImageRecompressionQuality):
 ModPagespeedJpegRecompressionQuality -1
 ModPagespeedJpegRecompressionQualityForSmallScreens 75
#
# WebP recompression quality (0 to 100, -1 uses ImageRecompressionQuality):
 ModPagespeedImageWebpRecompressionQuality 75
 ModPagespeedImageWebpRecompressionQualityForSmallScreens 75
#
# Timeout for conversions to WebP format, in
# milliseconds. Negative values mean no timeout is applied. The
# default value is -1:
# ModPagespeedImageWebpTimeoutMs 5000
#
# Percent of original image size below which optimized images are retained:
# ModPagespeedImageLimitOptimizedPercent 100
#
# Percent of original image area below which image resizing will be
# attempted:
# ModPagespeedImageLimitResizeAreaPercent 100

# Settings for inline preview images
#
# Setting this to n restricts preview images to the first n images found on
# the page.  The default of -1 means preview images can appear anywhere on
# the page (if those images appear above the fold).
# ModPagespeedMaxInlinedPreviewImagesIndex -1

# Sets the minimum size in bytes of any image for which a low quality image
# is generated.
# ModPagespeedMinImageSizeLowResolutionBytes 3072

与ziproxy压缩效果的对比测试

由于二者可配置的选项差别较大,很难进行很公平的对比测试。这里将二者的图像压缩质量都设置为75%左右,分别加载alexa top 100cn进行流量测试,结果显示在80%左右的情况下ziproxy的压缩效果要更好一些(ziproxy用默认设置,没有打开页面优化),如下图所示:

PageSpeed-Ziproxy

上图是去除了明显不合理结果后(比如超时返回0)PageSpeed与Ziproxy加载同一个网页的流量差,可以看出:对于80%左右的网站,ziproxy的压缩效果要更好一些,尤其是某些图片较多的网页,ziproxy的压缩效果明显更胜一筹,以下是本次测试中差值最大的10个网站的具体数据:

Addr Direct Ziproxy Pagespeed P-Z
http://www.babytree.com 2193.97 1397.07 2215.93 818.86
http://www.kdnet.net 2737.93 1883.82 2718.26 834.44
http://www.mama.cn 1913.24 659.72 1736.49 1076.77
http://www.lotour.com 3066.15 1825.24 3062.86 1237.62
http://www.china.com.cn 2150.49 898.45 2178.56 1280.11
http://www.v1.cn 3172.69 1889.61 3172.37 1282.76
http://www.lady8844.com 2711.86 1333.55 2727.24 1393.69
http://www.soku.com 2242.02 736.81 2242.28 1505.47
http://www.xywy.com 3287.15 1663.39 3286.04 1622.65
http://www.youth.cn 3710.69 1942.99 3688.09 1745.1

表中单位都是Kb。

经过筛选计算,本次测试中PageSpeed的平均压缩率为98.21%,而ziproxy的平均压缩率为65.93%。虽然数据可能存在一定的误差,但是从均值数据上也可以看出二者之间的差别。

下面是加载时间对比(这里使用了3个进程同步测试的方法,但是结果依然有明显误差,所以只能数据仅供参考):
z-p

上图横轴单位是毫秒。显然,大部分情况下,ziproxy压缩造成的时间消耗是多于pagespeed的,这点在意料之内。经计算,ziproxy的平均压缩时间是direct的1.11倍,而对于pagespeed,这个数值是1.08,如果均摊到本次试验的所有网页上,ziproxy比pagespeed平均多延迟0.35秒,至于这个结果究竟有多大的影响,这里不做结论。

另外,chrome beta for android声称能减少50%的流量,试验中没有看到相关页面可以达到这个数值,进一步的测试准备中。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注