如何在Ubuntu 18.04,Ubuntu 20.04和Nginx上安装PageSpeed模块

ngx_pagespeed是Nginx开源模块,可自动应用最佳实践来优化网站前端性能。 在本教程中,我将向您展示如何在Ubuntu 18.04和Ubuntu 20.04服务器上使用Nginx安装PageSpeed模块。 我们将ngx_pagespeed编译为动态模块,这将简化正在进行的维护。

步骤1:在Ubuntu 18.04 / Ubuntu 20.04上安装或升级Nginx

首先,如果您从PPA安装了Nginx,例如 ondrej/nginx PPA,您需要将其删除。

sudo add-apt-repository --remove ppa:ondrej/nginx
sudo apt remove nginx nginx-common nginx-full nginx-core
sudo apt update

如果您使用Ubuntu 20.04,则只需运行以下命令即可从默认存储库安装Nginx。

sudo apt install nginx

Nginx二进制文件需要使用 --with-compat 参数,因此稍后我们可以编译PageSpeed模块,而无需再次编译Nginx。 您可以使用以下命令检查Nginx的configure参数:

nginx -V

Ubuntu 20.04存储库中的Nginx二进制文件使用 --with-compat 论据。

如果您已经在Ubuntu 20.04上安装了Nginx,请确保您正在使用存储库中的最新版本。

sudo apt upgrade nginx

如果您使用Ubuntu 18.04,则需要从nginx.org信息库安装最新版本的Nginx,因为Ubuntu 18.04信息库的Nginx二进制文件未使用 --with-compat 论据。

第2步:下载Nginx源码包

我们将做一个 nginx 目录下 /usr/local/src/ 存储Nginx源码包。

sudo mkdir /usr/local/src/nginx

如果使用Ubuntu 20.04,则需要为主要组件启用deb-src存储库,以便下载Nginx源包。 编辑 sources.list 文件。

sudo nano /etc/apt/sources.list

找到以下行

# deb-src http://us.archive.ubuntu.com/ubuntu/ bionic main restricted

除掉 # 符号,以便启用此源存储库。 保存并关闭文件。 如果您使用Ubuntu 18.04,并按照我的教程从nginx.org信息库安装Nginx,则deb-src信息库已启用。

启用deb-src存储库后,更新存储库索引。

sudo apt update

cd进入Nginx源目录。

cd /usr/local/src/nginx/

使用以下命令下载Nginx源码包:

sudo apt install dpkg-dev

sudo apt source nginx

检查下载的文件。

ls

输出:

nginx-1.17.0
nginx_1.17.0-1~bionic.debian.tar.xz
nginx_1.17.0-1~bionic.dsc
nginx_1.17.0.orig.tar.gz

步骤3:下载ngx_pagespeed源码包

要使用ngx_pagespeed模块编译Nginx,我们还需要ngx_pagespeed源程序包。 克隆ngx_pagespeed Git存储库。

cd /usr/local/src

sudo apt install git

sudo git clone https://github.com/apache/incubator-pagespeed-ngx.git

cd incubator-pagespeed-ngx/

使用最新稳定分支。

sudo git checkout latest-stable

在里面 PSOL_BINARY_URL 文件中,我们可以看到PSOL(PageSpeed优化库)下载URL。

https://dl.google.com/dl/page-speed/psol/1.13.35.2-$BIT_SIZE_NAME.tar.gz

下载PSOL并将其解压缩。

sudo wget https://dl.google.com/dl/page-speed/psol/1.13.35.2-x64.tar.gz
sudo tar xvf 1.13.35.2-x64.tar.gz

它将创建一个 psol 目录下 incubator-pagespeed-ngx 目录。

步骤4:编译ngx_pagespeed模块

确保您位于Nginx源目录中。

cd /usr/local/src/nginx/nginx-1.17.0

为Nginx安装构建依赖项。

sudo apt build-dep nginx
sudo apt install uuid-dev

使用以下命令配置环境。 我们不会编译Nginx本身,而只会编译PageSpeed模块。 的 --with-compat 标志将使模块与您现有的Nginx二进制文件二进制兼容。

sudo ./configure --with-compat --add-dynamic-module=/usr/local/src/incubator-pagespeed-ngx

仅构建PageSpeed模块,这将在短时间内完成。

sudo make modules

如果遇到错误,请检查服务器是否有足够的RAM。 该模块将另存为 objs/ngx_pagespeed.so,将其复制到 /usr/share/nginx/modules/ 目录。

sudo cp objs/ngx_pagespeed.so /usr/share/nginx/modules/

如果您是从nginx.org repostiory安装Nginx的,则可以将其复制到 /etc/nginx/modules/ 目录代替。

sudo cp objs/ngx_pagespeed.so /etc/nginx/modules/

步骤5:加载ngx_pagespeed模块

编辑主要的Nginx配置文件。

sudo nano /etc/nginx/nginx.conf

在文件开头添加以下行。

load_module modules/ngx_pagespeed.so;

保存并关闭文件。 然后测试Nginx配置。

sudo nginx -t

如果测试成功,请重新加载Nginx。

sudo systemctl reload nginx

步骤6:配置PageSpeed过滤器

创建一个用于pagespeed缓存的文件夹,并将其所有权更改为Nginx用户(www-data),以便Nginx可以写入它。

sudo mkdir -p /var/ngx_pagespeed_cache

sudo chown -R www-data:www-data /var/ngx_pagespeed_cache

现在编辑Nginx服务器块配置文件。

sudo nano /etc/nginx/conf.d/your-domain.conf

在下面添加以下pagespeed指令 server 部分。

# enable pagespeed module on this server block
pagespeed on;

# Needs to exist and be writable by nginx. Use tmpfs for best performance.
pagespeed FileCachePath /var/ngx_pagespeed_cache;

# Ensure requests for pagespeed optimized resources go to the pagespeed handler
# and no extraneous headers get set.
location ~ ".pagespeed.([a-z].)?[a-z]{2}.[^.]{10}.[^.]+" {
  add_header "" "";
}
location ~ "^/pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon$" { }

pagespeed RewriteLevel CoreFilters;

如果在单个服务器上托管多个网站,则将上述pagespeed指令添加到每个服务器块配置文件中,以在每个服务器块配置文件上启用pagespeed。

最后一个指令集 CoreFilters 作为重写级别。 PageSpeed提供3种重写级别: CoreFilterPassThroughOptimizeForBandwidthCoreFilter 是默认设置,因为它包含大多数网站认为安全的过滤器。

CoreFilter 包含以下过滤器。

   add_head
   combine_css
   combine_javascript
   convert_meta_tags
   extend_cache
   fallback_rewrite_css_urls
   flatten_css_imports
   inline_css
   inline_import_to_link
   inline_javascript
   rewrite_css
   rewrite_images
   rewrite_javascript
   rewrite_style_attributes_with_url

您可能还希望在Nginx服务器块配置文件中添加以下不在CoreFilters中的PageSpeed指令。

pagespeed EnableFilters collapse_whitespace;
pagespeed EnableFilters lazyload_images;
pagespeed EnableFilters insert_dns_prefetch;
pagespeed EnableFilters prioritize_critical_css;
#This filter is likely to cause problems for loading your web pages. 
pagespeed EnableFilters defer_javascript;

注意 WordPress现在默认情况下延迟加载图像。 因此,如果您使用WordPress,则无需启用 lazyload_images 过滤。

有关每个过滤器的详细说明,请转到Google PageSpeed过滤器页面。

保存并关闭服务器块配置文件。 在重新加载Nginx之前,建议您转到Google PageSpeed Insights来测试您的网页。 然后重新加载Nginx。

sudo systemctl reload nginx

现在,再次测试您的PageSpeed得分,这样您就可以看到区别。

步骤7:检查ngx_pagespeed是否正常工作

转到您的网站。 刷新几次,然后检查您的页面来源。 击中 Ctrl + F 键和搜索 页面速度。 您会看到许多网站资源已由pagespeed处理。 一些CSS文件和JavaScript文件被合并为一个文件。 如果您使用的是Google Chrome浏览器,则会看到您网站的图片位于 网页 文件格式。 webp可以大大减小图像文件的大小。

您还可以通过比较您的网站速度测试来发现ngx_pagespeed正在运行。 同样在您的服务器上,您可以发出以下命令:

curl -I -p https://youdomain.com

您将看到X-Page-Speed及其版本号。

x-page-speed: 1.13.35.2-0

阻止Nginx自动升级

如果存储库中有较新版本的Nginx,则 sudo apt upgrade 命令将升级Nginx。 Nginx的较新版本将与以前编译的PageSpeed模块不兼容。 如果Nginx已由 sudo apt upgrade 命令,它将无法重新启动。

我的建议是在运行时防止Nginx升级 sudo apt upgrade 命令。 这可以通过以下命令来实现:

sudo apt-mark hold nginx

什么时候 易于 软件包管理器告诉您有新版本的Nginx可用,您应该下载新的Nginx源软件包并重新编译PageSpeed模块。 将新编译的PageSpeed模块移至 /usr/share/nginx/modules/ 要么 /etc/nginx/modules/ 目录。 然后解开Nginx。

sudo apt-mark unhold nginx

并升级Nginx。

sudo apt upgrade nginx

升级完成后,再次按住Nginx。

sudo apt-mark hold nginx

要显示保留哪些软件包,请运行

apt-mark showhold

包起来

我希望本教程可以帮助您在Ubuntu 18.04和Ubuntu 20.04上使用Nginx安装PageSpeed模块。

Sidebar