随着网页平均大小持续增长,全面优化网站的设计、开发和交付变得愈发重要,这有助于确保用户无论使用何种设备,都能获得良好体验。已有充分证据表明,页面加载时间会影响用户体验和收入。
Google PageSpeed 是一套用于衡量和优化网站性能的工具,数年来一直以第三方模块的形式提供,可编译到 NGINX Open Source 中。随着 NGINX Plus R11 引入动态模块,NGINX Plus用户现在也可以使用 PageSpeed。
将PageSpeed作为动态模块加载到NGINX Plus后,它会自动重写并优化网站上的资源。本博文将介绍如何构建和配置该动态模块。(请注意,PageSpeed属于第三方模块,不在NGINX Plus支持协议的涵盖范围内。)
将PageSpeed构建为NGINX Plus动态模块并加载
以下说明基于Google 手动安装说明,并针对与 NGINX Plus 的二进制兼容性进行了调整。(可以直接按照 Google 的说明构建适用于 NGINX Open Source 的动态模块。)
步骤 0:准备构建环境
强烈建议在单独的系统上编译动态模块,本文将该系统称为“构建环境”。这样可以最大限度地降低计划运行带有PageSpeed模块的NGINX Plus系统(本文称为“生产环境”)的风险和复杂性。构建环境必须与生产环境使用相同的操作系统及版本;此外,还必须安装以下组件:
- UnZip实用工具
- 编译器和make实用程序
- Perl 兼容正则表达式库(开发文件)
- Zlib 压缩库(开发文件)
为确保构建环境已安装这些必备组件,请运行以下命令。
- 对于Ubuntu/Debian:
$ sudo apt-get install unzip gcc make libpcre3-dev zlib1g-dev- 对于 CentOS/RHEL/Oracle Linux:
$ sudo yum install unzip gcc make pcre-devel zlib-devel第1步:获取NGINX Open Source
- 在生产环境中运行以下命令,确定与当前运行的NGINX Plus版本对应的NGINX Open Source版本。该版本在输出中以橙色突出显示:NGINX 1.11.5,对应NGINX Plus R11。
$ nginx -vnginx version: nginx/1.11.5 (nginx-plus-r11)- 在构建环境中,下载相应NGINX Open Source版本的源代码。
$ wget -qO - http://nginx.org/download/nginx-1.11.5.tar.gz | tar zxfv -第 2 步:下载并准备 PageSpeed 源代码
在构建环境中执行以下步骤。
- 在发行说明中查找PageSpeed模块的最新版本号,或运行以下命令。
$ curl -sS https://modpagespeed.com/doc/release_notes | grep release_ | head -1 | sed -e "s/^.*release_([0-9.]*)-beta.*/1/"- PageSpeed版本号会在构建命令中多次使用,因此请将其设置为环境变量
NPS_VERSION。版本字符串中仅包含数字部分,不要包含‑stable或‑beta后缀。
$ NPS_VERSION=numeric-part-of-version-string- 按如下方式下载并解压源代码。请注意,这些命令应像脚本一样按顺序运行。
wget https://github.com/pagespeed/ngx_pagespeed/archive/v${NPS_VERSION}-beta.zip unzip v${NPS_VERSION}-beta.zip cd ngx_pagespeed-${NPS_VERSION}-beta/ psol_url=https://dl.google.com/dl/page-speed/psol/${NPS_VERSION}.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}) # extracts to psol/第3步:编译PageSpeed动态模块
- 在构建环境中编译PageSpeed动态模块。首先,使用
configure脚本并指定--with-compat参数,使动态模块与NGINX Plus保持二进制兼容。然后运行makemodules,仅编译该模块。
$ cd ../nginx-1.11.5$ ./configure --add-dynamic-module=../ngx_pagespeed-${NPS_VERSION}-beta --with-compat
$ make modules- 构建过程生成的动态模块为objs/ngx_pagespeed.so。将构建环境中的.so文件复制到生产环境的模块目录/etc/nginx/modules中。建议在复制文件时将其重命名,使文件名包含NGINX Open Source版本号(后续步骤也以此为前提),例如ngx_pagespeed_1.11.5.so。
- 在生产环境中,在包含版本号的文件名与通用(原始)文件名之间创建符号链接。
$ cd /etc/nginx/modules$ sudo ln -s ngx_pagespeed_1.11.5.so ngx_pagespeed.so
$ ls -gG
-rw-r--r-- 1 11924784 Feb 6 11:52 ngx_pagespeed_1.11.5.so
lrwxrwxrwx 1 23 Feb 6 11:52 ngx_pagespeed.so -> ngx_pagespeed_1.11.5.so第4步:加载PageSpeed动态模块
请在生产环境中执行以下步骤。
- 添加
load_module指令,将PageSpeed作为动态模块加载。该指令必须位于nginx.conf配置文件的顶层(“main”)上下文中(即不能位于http或stream上下文中)。
load_module modules/ngx_pagespeed.so;- PageSpeed本身在
http上下文中配置,因此请将这些指令放入名为pagespeed.conf的新配置文件中,该文件位于/etc/nginx/conf.d目录下。PageSpeed将针对proxy_pass指令中指定的网站启用,此处为http://www.example.com。
pagespeed MessageBufferSize 10240;
pagespeed FileCachePath /var/ngx_pagespeed_cache;
server {
listen 80;
location / {
proxy_pass http://www.example.com;
}
pagespeed on;
}- 重新加载NGINX Plus,将PageSpeed模块加载到正在运行的实例中。
$ sudo nginx -s reload使用PageSpeed Insights测试NGINX Plus PageSpeed模块
PageSpeed Insights是Google提供的一款独立工具,用于衡量网页针对移动设备和桌面设备的优化程度。它会分别为这两类设备评分,并提供加快页面加载速度的建议。该工具可用于评估网站,并展示PageSpeed模块的效果。
可以使用PageSpeed Insights比较启用和未启用PageSpeed时的网站评分和优化建议。通过在pagespeed on;和pagespeed off;指令之间切换,衡量PageSpeed模块对网站的优化效果。
PageSpeed无需进一步配置或调优即可应用优化。不过,如果希望更精细地控制对网站执行哪些优化,请参阅PageSpeed文档。
亲自体验NGINX Plus与PageSpeed,立即开始30天免费试用,或联系我们,讨论您的用例。
关于作者

相关博客文章
NGINX Plus R26 正式发布
NGINX Plus R26通过缓存JSON Web密钥集加快JWT验证,并强化TLS握手,从而提升安全性。NGINX JavaScript的新功能包括增强对异步函数的支持,以及实现WebCrypto API。
使用NGINX App Protect DoS保护gRPC应用,抵御严重的DoS攻击
gRPC具备开发人员设计和部署现代应用所需的速度与灵活性,但其开放性也使其极易受到第7层DoS攻击。NGINX App Protect DoS可保护gRPC应用免受此类破坏性攻击。
Ingress Controller 选型指南(第 2 部分):风险与面向未来的规划
了解选择错误的Ingress控制器可能带来的风险,以及如何从关键方面着手,让您的选择更好地适应未来需求。
NGINX Plus R19 正式发布
NGINX Plus R19扩展了监控功能,不仅提供更多指标,还新增了指标分析方式;增加试运行模式,用于测试限速效果;增强键值存储,以支持IP地址范围;并使限速更加动态。
NGINX现已正式加入F5
NGINX现已正式成为F5的一部分。Gus Robertson现任F5 NGINX业务部门负责人。他阐述了两家公司在人才、文化和愿景方面融合的价值,以及双方将如何携手增强NGINX的开源产品和商业产品。
