如何在 Ubuntu 14.04 上为 Nginx 添加 ngx_pagespeed

简介

NGX_Pagespeed,或简称Pages,是一个Nginx模块,旨在通过减少资源的大小来自动优化您的站点,从而减少客户端浏览器需要加载它的时间。如果您还不熟悉,请查看它的官方site.

本文将指导您完成Nginx的页面速度模块的安装和配置。重要的是要知道,Nginx不支持模块的动态加载,这些模块在其他Web服务器上可用,比如阿帕奇。由于Nginx不支持此功能,因此需要从源码构建Nginx才能添加模块。

拥有自己的定制包有一个缺点--当有新版本时,您只需负责更新它。在权衡使用NGX_PAGESPESPED的利弊时,请考虑这一点。

预约

本指南是为Ubuntu 14.04编写的。CentOS 7 versionDebian8 version]也是可用的。

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

  • Ubuntu 14.04水滴
  • 非超级用户sudo(有关详细信息,请查看使用Ubuntu 14.04的初始服务器设置]。)

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

Step 1-下载源代码及其依赖项

首先,我们必须确保通过apt-get提供的包列表已经更新:

1sudo apt-get update

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

1sudo apt-get build-dep nginx

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

1mkdir ~/custom-nginx

更改到此新创建的目录:

1cd ~/custom-nginx

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

1sudo apt-get source nginx

为了确认我们的想法一致,请列出~/Custom-nginx文件夹的内容:

1ls ~/custom-nginx

结果应该如下所示:

1[secondary_label Output of ls ~/custom-nginx]
2nginx-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中的modes文件夹:

1cd nginx-1.4.6/debian/modules

在此目录中,使用以下命令从其github repository]下载最新的ngx_pagespeed源代码归档文件:

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

下载完成后,您需要使用unzip实用程序将其解压缩。如果您还没有unzip,可以使用以下命令进行安装:

1sudo apt-get install unzip

之后,使用以下命令解压缩下载的文件:

1sudo unzip master.zip

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

1sudo mv ngx_pagespeed-master ngx_pagespeed

进入新的ngx_pagespeed目录:

1cd ngx_pagespeed

从那里下载编译所需的页面速度优化库(PSOL):

1sudo 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包:

1sudo tar -xzvf 1.9.32.6.tar.gz

第二步-定制源代码

此时,您已经准备好定制编译规则,并在安装中包含NGX_PAGESPESPEED。为此,请使用您喜欢的编辑器编辑~/Custom-nginx/nginx-1.4.6/debian/rules文件:

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

在这里,你有五种不同的场景来构建Nginx的包:corefulllightextrasnaxsi。正如它们的名字所暗示的那样,'common'包含没有服务器的常见Nginx文件,'full'包括一个带有最流行模块的服务器,'light'创建一个只带有基本模块的服务器,'extras'用于其中带有一些额外花哨模块的服务器,而'naxsi'还有naxsi模块(Web应用程序防火墙)。

让我们假设您需要一个lightNginx设置加上ngx_ages_peed。因此,在light_CONFIGURE_FLAGS配置块的末尾添加一行:

1[label ~/custom-nginx/nginx-1.4.6/debian/rules]
2--add-module=$(MODULESDIR)/ngx_pagespeed \

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

 1[label ~/custom-nginx/nginx-1.4.6/debian/rules]
 2config.status.light: config.env.light
 3        cd $(BUILDDIR_light) && ./configure  \
 4            $(common_configure_flags) \
 5            --with-http_gzip_static_module \
 6            --without-http_browser_module \
 7            --without-http_geo_module \
 8            --without-http_limit_req_module \
 9            --without-http_limit_zone_module \
10            --without-http_memcached_module \
11            --without-http_referer_module \
12            --without-http_scgi_module \
13            --without-http_split_clients_module \
14            --without-http_ssi_module \
15            --without-http_userid_module \
16            --without-http_uwsgi_module \
17            --add-module=$(MODULESDIR)/nginx-echo \
18            --add-module=$(MODULESDIR)/ngx_pagespeed \
19            >$@
20        touch $@

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

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

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

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

1[label changelog]
2nginx (1.4.6-1ubuntu3.3-pagespeed) trusty-proposed; urgency=medium

Step 3 -使用Pagespeed模块构建并安装Nginx

现在您已经定制了包含ngx_ages_peed模块的构建,接下来就可以构建nginx了。

使用以下命令进入~/Custom-nginx/nginx-1.4.6/目录:

1cd ~/custom-nginx/nginx-1.4.6/

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

1sudo dpkg-buildpackage -b

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

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

1cd ~/custom-nginx/

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

1ls ~/custom-nginx/

你会发现很多.deb包。你需要的是nginx-common_1.4.6-1ubuntu3.3-pagespeed_all.deb(包含常用的Nginx文件)和nginx-light_1.4.6-1ubuntu3.3-pagespeed_amd64.deb(包含你的自定义light服务器)。如果您在changelog文件中指定了不同的自定义标记,pagespeed部分可能会有所不同。

要安装带有页面速度模块的定制Nginx,请运行以下命令:

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

第四步-开启Pagespeed模块

现在,您已经安装了Nginx。下一步是启用ngx_ages_peed模块。

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

1sudo mkdir -p /var/ngx_pagespeed_cache

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

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

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

1sudo nano /etc/nginx/nginx.conf

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

1[label  /etc/nginx/nginx.conf]
2##
3# Pagespeed Settings
4##
5
6pagespeed on;
7pagespeed FileCachePath /var/ngx_pagespeed_cache;

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

/etc/nginx/nginx.conf文件现在应该是这样的:

 1[label /etc/nginx/nginx.conf]
 2...
 3http {
 4
 5        ##
 6        # Basic Settings
 7        ##
 8
 9        sendfile on;
10        tcp_nopush on;
11        tcp_nodelay on;
12        keepalive_timeout 65;
13        types_hash_max_size 2048;
14        # server_tokens off;
15
16        # server_names_hash_bucket_size 64;
17        # server_name_in_redirect off;
18
19        ##
20        # Pagespeed Settings
21        ##
22
23        pagespeed on;
24        pagespeed FileCachePath /var/ngx_pagespeed_cache;
25...

另外,您需要在/etc/nginx/ites-available中的_EVERY_server块文件中添加分页速度配置行。例如,编辑/etc/nginx/ites-available/default文件:

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

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

1[label /etc/nginx/sites-available]
2#  Ensure requests for pagespeed optimized resources go to the pagespeed
3#  handler and no extraneous headers get set.
4location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { add_header "" ""; }
5location ~ "^/ngx_pagespeed_static/" { }
6location ~ "^/ngx_pagespeed_beacon" { }

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

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

1sudo service nginx restart

Step 5-测试安装

要检查是否已成功安装ngx_pagespeed模块,请按如下方式运行nginx二进制文件:

1sudo /usr/sbin/nginx -V

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

1[secondary_label Output]
2nginx version: nginx/1.4.6
3...
4--add-module=/home/your_user/custom-nginx/nginx-1.4.6/debian/modules/ngx_pagespeed

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

1sudo apt-get install curl

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

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

如果ngx_ages_peed模块运行良好,您应该会在输出中看到它及其版本:

1[secondary_label Output]
2X-Page-Speed: 1.9.32.6-7321

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

Step 6 - Pin自定义Nginx包

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

/etc/apt/parences.d中创建新的nginx文件:

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

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

1[label /etc/apt/preferences.d/nginx]
2Package: nginx-light
3Pin: version 1.4.6-1ubuntu3.3-pagespeed
4Pin-Priority: 1001

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

结论

这就是如何使用定制模块Pagespeed构建Nginx的方法。这些步骤对Nginx中尚未提供的任何其他模块都有效。此外,从源代码安装软件包的整个过程与您可能需要定制的其他软件包类似。但不要忘记,当有新版本时,您将不得不自己维护和重新安装这些包。

Published At
Categories with 技术
comments powered by Disqus