最近就碰上了一个编译出错的问题,昨天折腾了一天都没有成功,真是相当的郁闷呀!甚至这个编译不成功具有传染性,两个主机不同的 Linux 平台竟然都出现了编译失败,本来是折腾 ngx_pagespeed 模块的,没有想到无论是哪个平台都出现编译最新版 ngx_pagespeed 出错,甚至 Debian 下编译 Tengine 都出错了,无语了。
今天在尝试降级了 Nginx 的版本后(也就是从 1.13.3 降至 1.12.0)后,重新编译添加模块 ngx_pagespeed 竟然成功了,很意外呀。看来 Nginx 的版本真心不能追的太紧了,就是 Tengine 的编译问题目前还是无解,郁闷。好了,不废话了,下面说说
ngx_pagespeed 吧。
ngx_pagespeed 是一个非常不错的 Nginx 拓展,介绍就免了,直接进入重点。不过呢,自从 1.12.34 版本号起其安装方式就变了,并且还增加了 Redis 支持。
下面还将介绍如何清理 PageSpeed 缓存。
PSOL 说明
在按谷歌官方教程的来的时候,大家估计也是蒙了,PSOL 竟然无法下载:
https://dl.google.com/dl/page-speed/psol/1.12.33.2.tar.gz | 404. That’s an error.
因为,自 1.12.34 版本开始,PSOL 已经给我们预编译好了,因此下载方式也产生了变更。如果没有解压新的 PSOL 包的话,编译时会提示:
You need to separately download the pagespeed library:
$ cd /root/ngx_pagespeed-latest-beta
$ wget https://dl.google.com/dl/page-speed/psol/1.12.34.2-x64.tar.gz
$ tar -xzvf 1.12.34.2-x64.tar.gz # expands to psol/
因此,新的预编译 PSOL 包和 ngx_PageSpeed 的下载姿势应该是:
https://dl.google.com/dl/page-speed/psol/[PageSpeed版本]-x[系统位数].tar.gz
例如:
https://dl.google.com/dl/page-speed/psol/1.12.34.2-x64.tar.gz
Redis 支持
PageSpeed 的外部缓存,已经支持 Redis 了,一些喜欢 Redis 或者更多依赖 Redis 网站可以使用 Redis 作为外部缓存,而不是 Memcached 了。
添加方法
在配置中加入:
pagespeed RedisServer "host:port";
设置连接失败后的等待时间,默认 1s(可选):(这个好像Nginx不支持的)pagespeed RedisReconnectionDelayMs timeout_in_milliseconds;
PageSpeed 缓存清理
touch /var/cache/pagespeed/cache.flush
运行上述语句即可, 其中 /var/cache/pagespeed/
为配置文件中,pagespeed FileCachePath /var/cache/pagespeed/;
设置的目录。
我目前使用的 ngx_pagespeed 配置
# 启用ngx_pagespeed
pagespeed on;
pagespeed FileCachePath /var/cache/pagespeed/;
# 禁用CoreFilters
pagespeed RewriteLevel PassThrough;
pagespeed RedisServer "127.0.0.1:6379";
# X-Header 值,用于判断是否生效
pagespeed XHeaderValue "Powered By www.imydl.com";
# 过滤规则
#pagespeed RewriteLevel OptimizeForBandwidth;
# 不需过滤的目录或文件
pagespeed Disallow "*/wp-admin/*";
pagespeed Disallow "*/wp-login.php*";
# 启用压缩空白过滤器
pagespeed EnableFilters collapse_whitespace;
# 启用JavaScript库卸载
pagespeed EnableFilters canonicalize_javascript_libraries;
# 把多个CSS文件合并成一个CSS文件
#pagespeed EnableFilters combine_css;
# 把多个JavaScript文件合并成一个JavaScript文件
#pagespeed EnableFilters combine_javascript;
# 删除带默认属性的标签
pagespeed EnableFilters elide_attributes;
# 改善资源的可缓存性
pagespeed EnableFilters extend_cache;
# 更换被导入文件的@import,精简CSS文件
pagespeed EnableFilters flatten_css_imports;
pagespeed CssFlattenMaxBytes 5120;
# 延时加载客户端看不见的图片
pagespeed EnableFilters lazyload_images;
# 启用JavaScript缩小机制
pagespeed EnableFilters rewrite_javascript;
# 启用图片优化机制
pagespeed EnableFilters rewrite_images;
# 预解析DNS查询
pagespeed EnableFilters insert_dns_prefetch;
# 重写CSS,首先加载渲染页面的CSS规则
pagespeed EnableFilters prioritize_critical_css;
18 条评论
感谢要仔细学习
redis有密码的话,怎么处理呢?
有密码的话,你得看说明文档里如何把密码带上了!
IIS想整Brotli和PageSpeed都没机会。。。
网上基本都没有IIS模块的编译教程,等微软编译又要拖很久,这估计是IIS走下坡路的原因吧。
IIS内置的模块基本都是微软编译的。
第三方模块少而且不可靠(随时停更)或者需要商业授权,比如有家公司老早就把PageSpeed移植到IIS了,但是要订阅授权。
不过IIS在其它方面倒是挺不错的。
这就是不开源的最大弊端!没有开放接口,人家想兼容你都没有办法!所以说闭源是非常落后的!
这模块看起来很牛逼的样子,不过现在暂时用不到,等需要用到再折腾
呵呵,多谢支持,欢迎常来!
明月兄对Nginx越折腾越厉害了,我的服务器也是Nginx,一直都不太敢折腾
呵呵,其实没事儿的,无非就是给Nginx添加模块而已,就算是失败了,只需要重新编译回去就是了!Nginx的平滑升级完全不用担心对网站访问有影响的!
感觉又拍云咋样
很不错,好牛逼的感觉!
研究得太深入了,真厉害。其实很多软件本身就不是越新越好,而是越稳定越好。比如centos7就不一定比6来得稳定。
是的,服务器上这方面特别的明显!
你的PageSpeed应该还没有完全配置好吧,还有站点favicon.ico的链接填错了。
favicon.ico的搞定了,原来是后台地址填错了!多谢指出!
嗯,配置了一部分,有些开启了不适合当前的主题!favicon.ico这个比较费解,我都指明路径了呀!
太高深了 玩不来
呵呵,Nginx很多都需要编译的!