博客 / Linux/ Nginx安装&配置Google提供的ngx_pagespeed模块

Nginx安装&配置Google提供的ngx_pagespeed模块

Nginx安装&配置Google提供的ngx_pagespeed模块

安装 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)的 httpserver 块中添加以下指令:

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 指令,并在此 serverlocation 块中启用 PageSpeed 即可。

重要提示:配置变更后,请务必使用 nginx -t 测试配置语法,然后重载 Nginx(systemctl reload nginxnginx -s reload)。

发表评论

您的邮箱不会公开。必填项已用 * 标注。