在Ubuntu 16.04上使用ngx_pagespeed模块编译Nginx

ngx_pagespeed是Nginx开源模块,可自动应用最佳做法来优化网站速度。 在本教程中,我们将讨论如何在Ubuntu 16.04 LTS上使用ngx_pagespeed模块编译Nginx。

1.备份Nginx配置文件

编译并安装Nginx之后,原始Nginx配置文件将被覆盖。 您可以使用以下命令将主配置文件和服务器阻止文件备份到您的主目录。 代字号代表您的主目录。

cp /etc/nginx/nginx.conf /etc/nginx/sites-available/*.conf /etc/nginx/conf.d/*.conf ~

2.添加官方Nginx存储库

本教程将在撰写本文时演示如何编译最新的Nginx主线版本1.11.1。 Ubuntu 16.04存储库具有Nginx 1.10。 我们添加了官方的Nginx存储库,如下所示。

首先获取Nginx GPG密钥,并将其导入到Ubuntu 16.04系统。

wget http://nginx.org/keys/nginx_signing.key

sudo apt-key add nginx_signing.key

然后编辑 sources.list 文件。

sudo nano /etc/apt/sources.list

在此文件的末尾添加以下两行。 deb-src行允许我们使用以下命令下载Nginx源程序包: apt source 命令。

deb http://nginx.org/packages/mainline/ubuntu/ xenial nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ xenial nginx

按Ctrl + O保存文件。 按Ctrl + X关闭文件。 然后更新本地包索引。

sudo apt update

现在,Nginx官方存储库已添加到Ubuntu 16.04。

3下载Nginx源码包

我们将做一个 nginx 目录位于主目录下以存储Nginx源,然后cd进入该目录。

mkdir ~/nginx && cd ~/nginx

安装 dpkg-dev 并使用以下命令下载Nginx源码包:

sudo apt install dpkg-dev
sudo apt source nginx

检查下载的文件。

ls ~/nginx/

输出:

nginx-1.11.1                               nginx_1.11.1-1~xenial.dsc
nginx_1.11.1-1~xenial.debian.tar.xz        nginx_1.11.1.orig.tar.gz

4.下载ngx_pagespeed源码包

要使用ngx_pagespeed模块编译Nginx,我们还需要ngx_pagespeed源程序包。 转到Github ngx_pagespeed下载页面。 ( https://github.com/pagespeed/ngx_pagespeed/releases )将最新的Beta版本下载到您的主目录中。

撰写本文时为v1.11.33.2-beta。 您可能需要更改版本号。

cd ~

wget https://codeload.github.com/pagespeed/ngx_pagespeed/zip/v1.11.33.2-beta

解压缩:

sudo apt-get install unzip

unzip v1.11.33.2-beta

cd到新创建的目录:

cd ngx_pagespeed-1.11.33.2-beta/

我们还需要下载psol库。 (PageSpeed优化库)并将其解压缩。 版本号对应于页面速度版本号。

wget https://dl.google.com/dl/page-speed/psol/1.11.33.2.tar.gz

tar xvf 1.11.33.2.tar.gz

它将创建一个 psol 目录下 ngx_pagespeed-1.11.33.2-beta 目录,这是需要的位置。

5.将ngx_pagespeed模块添加到Nginx编译规则

编辑Nginx编译规则文件。

sudo nano ~/nginx/nginx-1.11.1/debian/rules

在……的最后 COMMON_CONFIGURE_ARGS 部分,添加以下行。 更换 username 使用您的实际用户名。 此行指定ngx_pagespeed模块的位置。

--add-module=/home/username/ngx_pagespeed-1.11.33.2-beta

本教程将ngx_pagespeed源页面下载到主目录。 如果您使用root帐户,则替换 /home/username/root。 因为根用户的主目录是 /root

另请注意,您需要在 --with-ld-opt 如下图所示。 如果不这样做, –添加模块 编译Nginx时,您添加的行将被忽略。

现在保存并关闭文件。

6.开始编译!

确保您位于Nginx源目录中。

cd ~/nginx/nginx-1.11.1/

安装所有必需的依赖项以构建我们的Nginx deb软件包。

sudo apt build-dep nginx

现在,使用以下命令来构建deb软件包。

sudo dpkg-buildpackage -b

喝杯咖啡,等待几分钟。 在单核OpenVZ VPS上,此构建过程耗时约20分钟。 完成后,其中将有7个deb文件 〜/ nginx / 目录。 我们只需要安装 nginx_1.11.1-1~xenial_amd64.deb 要么 nginx_1.11.1-1~xenial_i386.deb 软件包,具体取决于您的OS体系结构。 其他的是Nginx动态模块包和调试包。 如果愿意,也可以安装它们。

如果您以前已经安装过Nginx,那么现在是时候删除旧版本,然后再安装新版本了。

sudo apt remove nginx nginx-common nginx-full

cd ~/nginx

sudo dpkg -i nginx_1.11.1-1~xenial_amd64.deb

要么

sudo dpkg -i nginx_1.11.1-1~xenial_i386.deb

现在让我们启动Nginx。

sudo systemctl start nginx

如果您看到以下错误消息。

Failed to start nginx.service: Unit nginx.service is masked.

然后取消屏蔽nginx并再次发出启动命令。

sudo systemctl unmask nginx

请注意,Nginx进程可能以用户身份运行 nginx 要么 www-data。 可以通过在其中编辑第一行来更改 /etc/nginx/nginx.conf 文件。 只要确保Nginx与PHP-FPM以同一用户身份运行即可。

现在检查Nginx的配置参数。

sudo nginx -V

如果您在末尾看到以下行,则ngx_pagespeed模块已成功添加到Nginx。

--add-module=/home/username/ngx_pagespeed-1.11.33.2-beta

7.启用ngx_pagespeed模块

PageSpeed与Nginx一起安装,但默认情况下处于禁用状态。 启用它之前,建议您在pingdom.com或webpagetest.org上测试网站速度。 请注意页面大小,请求数,页面加载时间等。启用PageSpeed后,再次进行测试以比较两个结果。

创建一个用于pagespeed缓存的文件夹,并将其所有权更改为Nginx用户(www-data或nginx),以便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指令。

# 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。

sudo systemctl reload nginx

8.检查PageSpeed是否正常工作

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

您还可以通过比较您的网站速度测试来发现ngx_pagespeed正在运行。

同样在您的服务器上,您可以发出以下命令:

curl -I -p http://your-domain.com| grep X-Page-Speed

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

X-Page-Speed: 1.11.33.2-7423

9.阻止Nginx升级

如果存储库中有较新版本的Nginx,则 apt-get升级 默认情况下,该命令将升级Nginx,而ngx_pagespeed模块将消失。 因此,我们需要防止Nginx升级。 这可以通过以下命令来实现:

sudo apt-mark hold nginx

要显示保留哪些软件包:

apt-mark showhold

您可能想在不在CoreFilters中的Nginx服务器块配置文件中添加一些pagespeed指令。

pagespeed EnableFilters collapse_whitespace;
pagespeed EnableFilters lazyload_images;
pagespeed EnableFilters insert_dns_prefetch;

ngx_pagespeed过滤器

修改服务器块配置文件后,不要忘记重新加载Nginx。

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

总是欢迎提出意见,问题或建议。 如果您发现此帖子有用,请🙂在社交媒体上与您的朋友分享! 请继续关注更多Linux教程。

Sidebar