#什么是pagespeed
一个由谷歌开发的网站服务器模块,名为PageSpeed模块(https://developers.google.com/speed/pagespeed/module)。PageSpeed旨在缩短网页加载的时间,减少网站服务器的带宽使用量。最近,已发布了Nginx版本的PageSpeed模块(ngx_pagespeed)。作为一种有望为Nginx网站服务器提速的可行方法,我将演示如何在Nginx中启用并配置ngx_pagespeed模块。
PageSpeed的功能特性
PageSpeed模块可以使用数量众多的重写”过滤器”,每个过滤器都可以选择性地开启/关闭,从而自动进行各种优化(比如,减小文档大小、减少HTTP请求数据、减少HTTP往返次数以及缩短DNS解析时间)。
下面是ngx_pagespeed支持的其中一些过滤器。想了解支持的全部过滤器,请参阅官方文档。
- Collapse Whitespace(压缩空白):通过把HTML网页中的多处连续空白换成一处空白,减少带宽使用量。
- Canonicalize JavaScript Libraries(规范化转换JavaScript库):通过自动把流行的JavaScript库换成免费托管的JavaScript库(比如由谷歌托管),减少带宽使用量。
- Combine CSS(合并CSS):通过把多个CSS文件合并成一个CSS文件,减少HTTP请求数量。
- Combine JavaScript(合并JavaScript):通过把多个JavaScript文件合并成一个JavaScript文件,减少HTTP请求数量。
- Elide Attributes(省略属性):通过删除由默认属性指定的标签,缩小文档大小。
- Extend Cache(扩展缓存):通过优化网页资源的可缓存性,减少带宽使用量。
- Flatten CSS Imports(精简CSS导入):通过删除CSS文件中的@import,减少HTTP请求往返次数。
- Lazyload Images(延时加载图片):延时加载在客户端浏览器上看不见的图片。
- Minify JavaScript(缩小JavaScript):通过缩小JavaScript,减少带宽使用量。
- Optimize Images(优化图片):通过引入更多的内嵌图片、压缩图片,或者将GIF图片转换成PNG图片,优化图片分发。
- Pre-Resolve DNS(预解析DNS):通过预解析DNS,缩短DNS解析时间。
- Prioritize Critical CSS(优化加载关键CSS规则):重写CSS文件,以便首先加载渲染页面的CSS规则。
与Apache网站服务器不一样,Nginx模块无法在运行时动态加载,而是必须在编译时加载。截至本文截稿时,ngx_pagespeed模块并未内置在随主要Linux发行版(比如Fedora 19)发布的Nginx程序包中。因而,想使用Nginx中的PageSpeed,你需要利用源代码来构建Nginx。
#下载pagespeed和psol
NPS_VERSION=1.12.34.3-stable wget https://github.com/pagespeed/ngx_pagespeed/archive/v${NPS_VERSION}.zip unzip v${NPS_VERSION}.zip cd ngx_pagespeed-${NPS_VERSION}/ NPS_RELEASE_NUMBER=${NPS_VERSION/stable/} psol_url=https://dl.google.com/dl/page-speed/psol/${NPS_RELEASE_NUMBER}.tar.gz [ -e scripts/format_binary_url.sh ] && psol_url=$(scripts/format_binary_url.sh PSOL_BINARY_URL) wget ${psol_url} tar -xzvf $(basename ${psol_url})
#在配置php中,添加pagespeed模块
./configure \
--prefix=/application/nginx-1.11.5 \
--with-http_stub_status_module \
--with-openssl=/root/openssl-OpenSSL_1_0_2j \
--add-module=/root/ngx_pagespeed-1.12.34.3-stable \
--with-http_v2_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-threads \
--with-http_realip_module
#编写pagespeed的配置文件,并在虚拟主机中引用
[root@li1548-187 conf]# cat /application/nginx-1.11.5/conf/ngx_pagespeed.conf pagespeed on; pagespeed FileCachePath /tmp/cache/ngx_pagespeed_cache; pagespeed RewriteLevel CoreFilters; pagespeed UseExperimentalJsMinifier on; pagespeed EnableFilters add_head; pagespeed EnableFilters extend_cache; pagespeed EnableFilters fallback_rewrite_css_urls; pagespeed EnableFilters flatten_css_imports; pagespeed EnableFilters inline_css; pagespeed EnableFilters prioritize_critical_css; pagespeed EnableFilters inline_import_to_link; pagespeed EnableFilters inline_javascript; pagespeed EnableFilters local_storage_cache; pagespeed EnableFilters collapse_whitespace,remove_comments; pagespeed EnableFilters outline_css; pagespeed EnableFilters flatten_css_imports; pagespeed EnableFilters move_css_above_scripts; pagespeed EnableFilters move_css_to_head; pagespeed EnableFilters outline_javascript; pagespeed EnableFilters combine_javascript; pagespeed EnableFilters combine_css; pagespeed EnableFilters rewrite_javascript; pagespeed EnableFilters rewrite_css,sprite_images; pagespeed EnableFilters rewrite_style_attributes; pagespeed EnableFilters rewrite_images; pagespeed EnableFilters recompress_images; pagespeed EnableFilters resize_images; pagespeed EnableFilters convert_meta_tags; pagespeed EnableFilters lazyload_images; pagespeed EnableFilters insert_dns_prefetch; #location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { add_header "" ""; } #location ~ "^/ngx_pagespeed_static/" { } #location ~ "^/ngx_pagespeed_beacon$" { } #location /ngx_pagespeed_statistics { allow 127.0.0.1; deny all; } #location /ngx_pagespeed_message { allow 127.0.0.1; deny all; }
在主机中引用
include ngx_pagespeed.conf;