前言

PageSpeed 为谷歌的一项网页优化项目,目前已开源,分别有Apache PageSpeed和ngx_pagespeed模块,分别适用于Apache和Nginx服务器(关于litespeed服务器也是有的但不是谷歌研发而是移植的),该模块主要通过改写HTML、CSS、js等文件源码以及图片等达到加速网页加载的目的。

直入主题!xd

官方网站

modpagespeed
ngx_pagespeed github
apache pagespeed github

安装依赖(以最新稳定版系统为例噢 以及ROOT权限)

#RedHat系
yum install gcc-c++ pcre-devel zlib-devel make unzip libuuid-devel
#Debian系
apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev unzip uuid-dev

下载安装包(以下以nginx为例)

#在 https://www.modpagespeed.com/doc/release_notes 可以获取PageSpeed最新的版本号
cd
wget https://github.com/apache/incubator-pagespeed-ngx/archive/v1.13.35.2-stable.tar.gz
tar -xvzf v1.13.35.2-stable.tar.gz
cd incubator-pagespeed-ngx-1.13.35.2-stable //该为pagespeed本体
wget https://dl.google.com/dl/page-speed/psol/1.13.35.2-x64.tar.gz //该为pagespeed的依赖PSOL
tar -xzvf 1.13.35.2-x64.tar.gz

以上为PageSpeed模块,然后就可以编译Nginx啦

编译Nginx

#以截至当前时间2020.2.25 当前Nginx最新版本为1.17.8为例
wget http://nginx.org/download/nginx-1.17.8.tar.gz //下载nginx-1.17.8的程序
tar -xvzf nginx-1.17.8.tar.gz //解压
cd nginx-1.17.8
nginx -V
#然后configure一下
#这里建议跟你原来编译Nginx的目录放在一起 例如我的
./configure --prefix=/usr/local/nginx \
--user=www \
--group=www \
--with-http_stub_status_module \
--with-http_v2_module \
--with-http_v3_module \
--with-http_v2_hpack_enc \
--with-http_spdy_module \
--with-http_ssl_module \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-openssl=../boringssl \
--with-quiche=../quiche \
--with-pcre=../pcre-8.43 \
--with-pcre-jit \
--with-ld-opt=-ljemalloc \
--add-module=../headers-more-nginx-module \
--add-module=../ngx_brotli \
--add-module=../incubator-pagespeed-ngx-1.13.35.2-stable
#因为 我这里同时编译了nginx_quic “../”是代表上一个目录 所以建议与你之前的nginx编译在同目录(只要在最后加上一个 --add-module=../incubator-pagespeed-ngx-1.13.35.2-stable就可以了哦)
#configure没有报错的话执行
make && make install


关于nginx_quic 可以参考我上一篇文章让Nginx用上QUIC(HTTP3)

pagespeed的配置

关于 PageSpeed 的所有功能可以参考 examples
这里建议pagespeed.conf与nginx.conf放在同目录(以下以我的/usr/local/nginx/为例)
先在 nginx.conf 中加入 include pagespeed.conf

略略略
http {
略略略
server {
略略略
}
include pagespeed.conf;   //添加这一条!!
}

然后在同目录下创建一个叫 pagespeed.conf 的文件

# on 启用,off 关闭
pagespeed on;
#域名 以下到#Redis之前的设置不添加的话 似乎对https无法生效
pagespeed Domain 这里输入自己的域名(不带协议头)例如 *.nmxc.ltd;
pagespeed LoadFromFile "这里输入你站点的域名带协议头例如(https://nmxc.ltd)括号不要 但是我这外面的双引号是要的" "这里输入你的网站在服务器中的目录 例如(/data/wwwroot/nmx/) 括号不要 但是我这外面的双引号是要的";
pagespeed LoadFromFileRuleMatch disallow .*;
pagespeed LoadFromFileRuleMatch allow \.css$;
pagespeed LoadFromFileRuleMatch allow \.jpe?g$;
pagespeed LoadFromFileRuleMatch allow \.png$;
pagespeed LoadFromFileRuleMatch allow \.gif$;
pagespeed LoadFromFileRuleMatch allow \.js$;
#Redis 如果有就添加 如果没有就不弄
#pagespeed RedisServer "127.0.0.1:6379";
#Memcached 如果有就添加 如果没有就不弄
#pagespeed MemcachedServers "127.0.0.1:11211";
# 重置 http Vary 头
pagespeed RespectVary on;
# html字符转小写
pagespeed LowercaseHtmlNames on;
# 压缩带 Cache-Control: no-transform 标记的资源
pagespeed DisableRewriteOnNoTransform off;
# 相对URL
pagespeed PreserveUrlRelativity on;
# X-Header 值,用于判断是否生效
pagespeed XHeaderValue "Powered By nmx";
# 配置服务器缓存位置和自动清除触发条件(空间大小、时限)
pagespeed CreateSharedMemoryMetadataCache /data/ngx_pagespeed 51200;
pagespeed DefaultSharedMemoryCacheKB 51200;
pagespeed FileCachePath "/data/ngx_pagespeed/";
pagespeed FileCacheSizeKb 2048000;
pagespeed FileCacheCleanIntervalMs 43200000;
pagespeed FileCacheInodeLimit 500000;
# 过滤规则
pagespeed RewriteLevel PassThrough;
# 过滤WordPress的后台(可选配置,可参考使用)
pagespeed Disallow "*/wp-admin/*";
pagespeed Disallow "*/wp-login.php*";
# 移除不必要的url前缀,开启可能会导致某些自动加载功能失效
#pagespeed EnableFilters trim_urls;
# 移除 html 空白
pagespeed EnableFilters collapse_whitespace;
# 移除 html 注释
pagespeed EnableFilters remove_comments;
# DNS 预加载
pagespeed EnableFilters insert_dns_prefetch;
# 压缩CSS
pagespeed EnableFilters rewrite_css;
pagespeed EnableFilters fallback_rewrite_css_urls;
# 合并CSS
pagespeed EnableFilters combine_css;
# 重写CSS,优化加载渲染页面的CSS规则
pagespeed EnableFilters prioritize_critical_css;
# google字体直接写入html 目的是减少浏览器请求和DNS查询
pagespeed EnableFilters inline_google_font_css;
# 压缩js
pagespeed EnableFilters rewrite_javascript;
# 合并js
pagespeed EnableFilters combine_javascript;
# 优化内嵌样式属性
pagespeed EnableFilters rewrite_style_attributes;
# 压缩图片
pagespeed EnableFilters rewrite_images;
#  该过滤器试图压缩图像数据和元数据,如带不必要的缩略图。这是一组滤波器,相当于使 convert_gif_to_png, convert_jpeg_to_progressive, convert_jpeg_to_webp, jpeg_subsampling, recompress_jpeg, recompress_png, recompress_webp, strip_image_color_profile, and strip_image_meta_data
pagespeed EnableFilters recompress_images;
# 将动画Gif图片转化为动画webp格式
pagespeed EnableFilters convert_to_webp_animated;
# 不加载显示区域以外的图片
pagespeed LazyloadImagesAfterOnload off;
# 图片预加载
pagespeed EnableFilters inline_preview_images;
# 移动端图片自适应重置
pagespeed EnableFilters resize_mobile_images;
# 图片延迟加载
pagespeed EnableFilters lazyload_images;
# 雪碧图片,图标很多的时候很有用
pagespeed EnableFilters sprite_images;
# 扩展缓存 改善页面资源的可缓存性
pagespeed EnableFilters extend_cache;
# 让内联 JavaScript 转为文件
pagespeed EnableFilters outline_javascript;
# 使用 JavaScript 从第一次出现图像加载图像替换重复的内联图像
pagespeed EnableFilters dedup_inlined_images;

以上为我自己的pagespeed.conf文件内容
然后需要在自己的网站配置文件中添加

  location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { add_header "" ""; }
  location ~ "^/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; }

然后执行nginx -t
如果没问题的话 直接输入 nginx -s reload 或者 service nginx restart进行重新载入配置或者重启nginx即可

结束

另外:不建议 小于1G运行内存使用噢!


沉淪在無盡的深淵中