安装 ngx_pagespeed 模块
ngx_pagespeed 是 Google 提供的 Nginx 模块,用于自动优化网站性能(如压缩图片、合并 CSS/JS 等)。以下是在 Nginx 中编译安装此模块的步骤。
1. 安装依赖
根据你的 Linux 发行版,安装必要的编译工具和库。
RedHat、CentOS 或 Fedora
sudo yum install gcc-c++ pcre-devel zlib-devel make unzip
Ubuntu 或 Debian
sudo apt-get install build-essential zlib1g-dev libpcre3 libpcre3-dev unzip
2. 下载 ngx_pagespeed
cd
NPS_VERSION=1.13.35.2
wget https://github.com/apache/incubator-pagespeed-ngx/archive/v${NPS_VERSION}.zip
unzip v${NPS_VERSION}.zip
cd incubator-pagespeed-ngx-${NPS_VERSION}/
wget https://dl.google.com/dl/page-speed/psol/${NPS_VERSION}-x64.tar.gz
tar -xzvf ${NPS_VERSION}-x64.tar.gz
注意:请访问 GitHub 发布页 获取最新的稳定版本号。上述命令中的版本号(1.13.35.2)和 PSOL 包名(-x64)可能需要根据实际情况调整。
3. 下载并编译 Nginx
cd
# 请访问 http://nginx.org/en/download.html 获取最新版本号
NGINX_VERSION=1.18.0
wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz
tar -xvzf nginx-${NGINX_VERSION}.tar.gz
cd nginx-${NGINX_VERSION}/
./configure --add-module=$HOME/incubator-pagespeed-ngx-${NPS_VERSION}
make
sudo make install
特殊情况:如果你在 64 位内核上运行 32 位用户空间(例如某些 VPS 环境),可能需要强制指定 32 位架构进行编译:
setarch i686 ./configure --add-module=$HOME/incubator-pagespeed-ngx-${NPS_VERSION}
4. 后续设置
如果这是你首次从源码安装 Nginx,需要手动设置 systemd 服务或 init 脚本。可以参考 Nginx 官方文档。
配置 ngx_pagespeed
安装完成后,需要在 Nginx 配置中启用并配置 ngx_pagespeed。
基本启用配置
在 Nginx 配置文件(通常位于 /usr/local/nginx/conf/nginx.conf 或 /etc/nginx/nginx.conf)的 http 或 server 块中添加以下指令:
pagespeed on;
# 缓存目录,需确保 Nginx 进程有写入权限
pagespeed FileCachePath /var/ngx_pagespeed_cache;
# 确保优化资源的请求被正确处理
location ~ ".pagespeed.([a-z].)?[a-z]{2}.[^.]{10}.[^.]+" {
add_header "" "";
}
location ~ "^/pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon$" { }
核心配置指令说明
- 启用/禁用模块:
pagespeed on;或pagespeed off;(完全禁用)。 - 尊重 Vary 头:默认情况下,PageSpeed 会忽略资源文件的
Vary: User-Agent等头以提升缓存效率。若需保留此行为,需显式启用:pagespeed RespectVary on; - 处理 no-transform:默认遵守
Cache-Control: no-transform响应头(不优化此类资源)。若要强制优化,可设置:pagespeed DisableRewriteOnNoTransform off; - HTML 标签小写化:为减小压缩后体积,可启用
pagespeed LowercaseHtmlNames on;。注意,此操作对误标为text/html的 XML 文件有风险。 - 保留原始缓存头:默认 PageSpeed 会为 HTML 添加
Cache-Control: no-cache, max-age=0。若要保留原头,可设置pagespeed ModifyCachingHeaders off;(不推荐,可能导致代理缓存问题)。
虚拟主机(Server Block)配置
可以在不同的 server 块中独立配置 PageSpeed。全局配置会被继承,但可在虚拟主机内覆盖。
http {
pagespeed On;
pagespeed FileCachePath "/var/cache/ngx_pagespeed/";
pagespeed EnableFilters combine_css,combine_javascript;
server {
server_name www.example1.com;
pagespeed MapRewriteDomain cdn.example1.com *example.com;
}
server {
server_name www.example2.org;
# 在此虚拟主机中禁用 combine_css 过滤器
pagespeed DisableFilters combine_css;
}
server {
server_name www.example3.org;
# 完全关闭此主机的 PageSpeed
pagespeed off;
}
}
其他实用配置
- 静态资源路径:自定义过滤器所需静态文件的路径,
pagespeed StaticAssetPrefix /custom/static/; - 错误时列出 URL:调试时启用
pagespeed ListOutstandingUrlsOnError on;可在错误日志中查看抓取失败的 URL。 - 保留 URL 相对性:启用
pagespeed PreserveUrlRelativity on;可避免将相对 URL 转为绝对 URL,节省字节并避免 HTTPS 代理问题。
作为反向代理使用
ngx_pagespeed 也可用于优化后端服务器内容。在 Nginx 的 location 块中使用 proxy_pass 指令,并在此 server 或 location 块中启用 PageSpeed 即可。
重要提示:配置变更后,请务必使用 nginx -t 测试配置语法,然后重载 Nginx(systemctl reload nginx 或 nginx -s reload)。