如何在Ubuntu14.04上将ngx pagespeed添加到Nginx

来自菜鸟教程
跳转至:导航、​搜索

介绍

ngx_pagespeed,或者只是 pagespeed,是一个 Nginx 模块,旨在通过减少其资源的大小来自动优化您的站点,从而减少客户端浏览器加载它的时间。 如果您还不熟悉它,请查看它的官方网站

本文将指导您完成 Nginx 的 pagespeed 模块的安装和配置。 重要的是要知道 Nginx 不支持 Dynamic Loading of Modules 在其他 Web 服务器(例如 Apache)中可用。 由于 Nginx 不支持此功能,因此您需要从源代码构建 Nginx 以添加模块。

拥有自己的自定义包有一个缺点——当有新版本时,你全权负责更新它。 在权衡使用 ngx_pagespeed 的利弊时要考虑到这一点。

先决条件

本指南是为 Ubuntu 14.04 编写的。 CentOS 7 版本Debian 8 版本 也可用。

在学习本教程之前,请确保您完成以下先决条件:

除非另有说明,本教程中所有需要 root 权限的命令都应以具有 sudo 权限的非 root 用户身份运行。

第 1 步 — 下载源代码及其依赖项

首先,我们必须确保通过 apt-get 可用的软件包列表已更新:

sudo apt-get update

接下来,我们必须满足运行 Nginx 所需的所有依赖项。 为此,运行命令:

sudo apt-get build-dep nginx

之后,在你的主目录中创建一个文件夹来下载 Nginx 的源包:

mkdir ~/custom-nginx

切换到这个新创建的目录:

cd ~/custom-nginx

然后,使用以下命令下载该目录下的 Nginx 源码包:

sudo apt-get source nginx

要确认我们在同一页面上,请列出文件夹 ~/custom-nginx 的内容:

ls ~/custom-nginx

结果应如下所示:

Output of ls ~/custom-nginxnginx-1.4.6  nginx_1.4.6-1ubuntu3.3.debian.tar.gz  nginx_1.4.6-1ubuntu3.3.dsc  nginx_1.4.6.orig.tar.gz

如您所见,在编写本教程时,Nginx 源包的版本为 1.4.6。 要开始添加 ngx_pagespeed 模块,首先需要转到解压缩文件夹 nginx-1.4.6 中的 modules 文件夹:

cd nginx-1.4.6/debian/modules

在此目录中,使用以下命令从其 Github 存储库 下载最新的 ngx_pagespeed 源存档:

sudo wget https://github.com/pagespeed/ngx_pagespeed/archive/master.zip

下载完成后,您将需要 unzip 实用程序来解压它。 如果您还没有 unzip,请使用以下命令安装它:

sudo apt-get install unzip

之后使用以下命令提取下载的文件:

sudo unzip master.zip

这将在您的 ~/nginx-1.4.6/debian/modules 目录中创建一个名为 ngx_pagespeed-master 的新目录。 为方便起见,使用以下命令将此目录重命名为 ngx_pagespeed

sudo mv ngx_pagespeed-master ngx_pagespeed

进入新的 ngx_pagespeed 目录:

cd ngx_pagespeed

从那里下载编译所需的 PageSpeed 优化库 (psol):

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

如果在您阅读本文时指向 psol 存档的链接不起作用,请跳过此步骤。 如果您在接下来的步骤中的编译过程中缺少库,您将看到一个错误,其中包含有关稍后如何获取包的更新说明。

最后,解压~/custom-nginx/nginx-1.4.6/debian/modules/ngx_pagespeed目录下的psol包:

sudo tar -xzvf 1.9.32.6.tar.gz

第 2 步 — 自定义源

此时您已准备好自定义编译规则并在安装中包含 ngx_pagespeed。 为此,使用您喜欢的编辑器编辑文件 ~/custom-nginx/nginx-1.4.6/debian/rules

sudo nano ~/custom-nginx/nginx-1.4.6/debian/rules

你有五种不同的场景来构建 Nginx 的包:corefulllightextrasnaxsi。 顾名思义,common 包含没有服务器的常见 Nginx 文件,full 包含一个带有最流行模块的服务器,light 创建一个只有基本模块的服务器, extras 用于服务器,其中包含一些额外的花哨模块,naxsi 还具有 naxsi 模块(Web 应用程序防火墙)。

假设您需要一个 light Nginx 设置和 ngx_pagespeed。 因此,在 light_configure_flags 配置块的末尾添加以下行:

~/custom-nginx/nginx-1.4.6/debian/rules

--add-module=$(MODULESDIR)/ngx_pagespeed \

请不要忘记在行尾添加反斜杠 (\)。 整个配置块应该如下所示:

~/custom-nginx/nginx-1.4.6/debian/rules

config.status.light: config.env.light
        cd $(BUILDDIR_light) && ./configure  \
            $(common_configure_flags) \
            --with-http_gzip_static_module \
            --without-http_browser_module \
            --without-http_geo_module \
            --without-http_limit_req_module \
            --without-http_limit_zone_module \
            --without-http_memcached_module \
            --without-http_referer_module \
            --without-http_scgi_module \
            --without-http_split_clients_module \
            --without-http_ssi_module \
            --without-http_userid_module \
            --without-http_uwsgi_module \
            --add-module=$(MODULESDIR)/nginx-echo \
            --add-module=$(MODULESDIR)/ngx_pagespeed \
            >$@
        touch $@

如果您发现不同的 Nginx 设置更方便,您也可以将同一行添加到其他构建方案中。

接下来,增加源包版本,因为这将帮助您稍后固定包。 为此,请使用文本编辑器打开 changelog 文件:

sudo nano ~/custom-nginx/nginx-1.4.6/debian/changelog

changelog 文件的第一行代表当前包版本(1.4.6-1ubuntu3.3)和 Ubuntu 代号(trusty)。 在版本号的末尾添加一个自定义标签,例如 pagespeed,前面带有一个连字符,如下所示:

变更日志

nginx (1.4.6-1ubuntu3.3-pagespeed) trusty-proposed; urgency=medium

第 3 步 — 使用 Pagespeed 模块构建和安装 Nginx

现在您已经自定义构建以包含 ngx_pagespeed 模块,您可以构建 Nginx。

使用以下命令转到目录 ~/custom-nginx/nginx-1.4.6/

cd ~/custom-nginx/nginx-1.4.6/

从这里,运行命令来构建新的自定义 Nginx 二进制包:

sudo dpkg-buildpackage -b

构建过程最多需要大约 10 分钟。 如果您担心在此期间可能会断开连接,您可以尝试使用 screen,如 this article 中所述。

如果您已按照所有说明进行操作,则构建过程应完成且不会出现任何错误。 要查找新的自定义 Nginx 包,请使用以下命令转到 ~/custom-nginx/ 的一个目录:

cd ~/custom-nginx/

列出~/custom-nginx/目录的内容:

ls ~/custom-nginx/

你应该找到很多 .deb 包。 您需要的称为 nginx-common_1.4.6-1ubuntu3.3-pagespeed_all.deb(包含常见的 Nginx 文件)和 nginx-light_1.4.6-1ubuntu3.3-pagespeed_amd64.deb(包含您的自定义轻服务器)。 如果您在 changelog 文件中指定了不同的自定义标签,则 pagespeed 部分可能会有所不同。

要使用 pagespeed 模块安装自定义 Nginx,请运行以下命令:

sudo dpkg -i nginx-common_1.4.6-1ubuntu3.3-pagespeed_all.deb nginx-light_1.4.6-1ubuntu3.3-pagespeed_amd64.deb

第 4 步 — 启用 Pagespeed 模块

你现在已经安装了 Nginx。 下一步是启用 ngx_pagespeed 模块。

在启用模块之前,您必须创建一个文件夹,它将缓存您网站的文件:

sudo mkdir -p /var/ngx_pagespeed_cache

确保将此文件夹的所有权更改为 Nginx 用户,以便 Web 服务器可以在其中存储文件:

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

然后,在您喜欢的文本编辑器中打开主 Nginx 配置文件 nginx.conf,如下所示:

sudo nano /etc/nginx/nginx.conf

在此文件中,将以下行添加到 http 块并保存更改:

/etc/nginx/nginx.conf

##
# Pagespeed Settings
##

pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;

您可以在 http 块中的任何位置添加这些行,但在我们的示例中,我们将其添加到块的末尾。

这就是 /etc/nginx/nginx.conf 文件现在的样子:

/etc/nginx/nginx.conf

...
http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        ##
        # Pagespeed Settings
        ##
        
        pagespeed on;
        pagespeed FileCachePath /var/ngx_pagespeed_cache;
...

此外,您需要将 pagespeed 配置行添加到位于 /etc/nginx/sites-available 中的 every server 块文件。 例如,编辑 /etc/nginx/sites-available/default 文件:

sudo nano /etc/nginx/sites-available/default

将以下内容添加到 server 块的末尾:

/etc/nginx/sites-available

#  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 ~ "^/ngx_pagespeed_static/" { }
location ~ "^/ngx_pagespeed_beacon" { }

上面的 pagespeed 配置行确保 pagespeed 将优化每个站点的资源。

最后,重启 Nginx 服务器以使更改生效:

sudo service nginx restart

第 5 步 — 测试安装

要检查 ngx_pagespeed 模块是否已成功安装,请运行 Nginx 二进制文件,如下所示:

sudo /usr/sbin/nginx -V

如果安装成功,您应该会在其他模块中看到 ngx_pagespeed 模块:

Outputnginx version: nginx/1.4.6
...
--add-module=/home/your_user/custom-nginx/nginx-1.4.6/debian/modules/ngx_pagespeed

以上并不意味着 pagespeed 已启用并适用于您的网站。 要确认这一点,您可以使用 curl,这是一个用于客户端 URL 传输的工具和库。 如果您还没有安装 curl,请使用以下命令进行安装:

sudo apt-get install curl

之后检查 X-Page-Speed 标头,如下所示:

curl -I -p http://localhost| grep X-Page-Speed

如果 ngx_pagespeed 模块工作正常,您应该在输出中看到它及其版本:

OutputX-Page-Speed: 1.9.32.6-7321

如果您没有看到此标题,请确保您已按照上一步中的说明启用了 pagespeed。

第 6 步 — 固定您的自定义 Nginx 包

为了防止您的自定义 Nginx 包将来被 apt 替换为更新的 Nginx 版本,您应该通过以下步骤固定(阻止)您的包升级:

/etc/apt/preferences.d中新建一个nginx文件:

sudo nano /etc/apt/preferences.d/nginx

然后在其中粘贴以下行并保存:

/etc/apt/preferences.d/nginx

Package: nginx-light
Pin: version 1.4.6-1ubuntu3.3-pagespeed
Pin-Priority: 1001

请确保指定您决定使用的 Nginx 包。 在我们的示例中,它是 nginx-light。 此外,请指定确切的版本以及您的自定义标签,例如 1.4.6-1ubuntu3.3-pagespeed

结论

这就是您可以使用自定义模块 pagespeed 构建 Nginx 的方式。 这些步骤适用于 Nginx 中尚不可用的任何其他模块。 此外,从源代码安装软件包的整个过程与您可能需要自定义的其他软件包类似。 只是不要忘记,当有新版本时,您必须自己维护和重新安装这些软件包。