如何在 Debian 8 上为 Nginx 添加 ngx_pagespeed

简介

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

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

拥有自己的自定义软件包有一个缺点-当有新版本时,您独自负责更新它。在权衡使用ngx_pagespeed的利弊时,请考虑这一点。

前提条件

本指南是为Debian8编写的。也有Ubuntu14.04 versionCentOS7 version]可用。

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

  • A Debian 8 Drop
  • 非超级用户sudo(有关详细信息,请查看使用debian 8的初始服务器设置]。)

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

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

首先,我们必须满足运行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.6.2 nginx_1.6.2-5.debian.tar.xz nginx_1.6.2-5.dsc nginx_1.6.2.orig.tar.gz

正如您所看到的,在撰写本教程时,Nginx源代码包的版本是1.6.2。要开始添加ngx_pagespeed模块,首先需要转到解压文件夹nginx-1.6.2中的modules文件夹:

1cd nginx-1.6.2/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.6.2/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.6.2/debian/modules/ngx_pagespeed目录中的psol包:

1sudo tar -xzvf 1.9.32.6.tar.gz

第二步-定制源代码

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

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

在这里,您可以使用四种不同的场景来构建Nginx的包:CommonfulllightExtras。顾名思义,Common包含不带服务器的常见Nginx文件,full包含最热门模块的服务器,light创建仅包含基本模块的服务器,而Extras用于包含额外花哨模块的服务器。

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

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

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

 1[label ~/custom-nginx/nginx-1.6.2/debian/rules]
 2light_configure_flags := \
 3                        $(common_configure_flags) \
 4                        --with-http_gzip_static_module \
 5                        --without-http_browser_module \
 6                        --without-http_geo_module \
 7                        --without-http_limit_req_module \
 8                        --without-http_limit_zone_module \
 9                        --without-http_memcached_module \
10                        --without-http_referer_module \
11                        --without-http_scgi_module \
12                        --without-http_split_clients_module \
13                        --without-http_ssi_module \
14                        --without-http_userid_module \
15                        --without-http_uwsgi_module \
16                        --add-module=$(MODULESDIR)/nginx-echo \
17                        --add-module=$(MODULESDIR)/ngx_pagespeed

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

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

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

changelog文件的第一行表示当前包版本(1.6.2-5)和Debian发行版名称(unstable)。在版本号的末尾添加一个自定义标签,如pagespeed,前面加一个连字符,如下所示:

1nginx (1.6.2-5-pagespeed) unstable; urgency=medium

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

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

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

1cd ~/custom-nginx/nginx-1.6.2/

在这里,运行命令以构建新的定制Nginx包:

1sudo dpkg-buildpackage -b

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

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

1cd ~/custom-nginx/

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

1ls ~/custom-nginx/

您应该可以找到很多.deb包。您需要的文件名分别是nginx-Common_1.6.2-5-pagespeed_all.deb(包含常用的nginx文件)和nginx-light_1.6.2-5-pagespeed_amd64.deb(包含您自定义的光服务器)。如果您在changelog文件中指定了不同的自定义标签,则pagespeed部分可能会有所不同。

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

1sudo dpkg -i nginx-common_1.6.2-5-pagespeed_all.deb nginx-light_1.6.2-5-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.6.2
3...
4--add-module=/home/your_user/custom-nginx/nginx-1.6.2/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/preferences.d中新建一个nginx文件:

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

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

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

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

结论

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

Published At
Categories with 技术
comments powered by Disqus