如何在 Debian Wheezy 中为 Nginx 添加 ngx_pagespeed 模块

简介


ngx_Pagespeed 只是添加到ngix Web服务器的一个模块,旨在通过减少互联网浏览器加载网页的时间来加快网站速度-<a href=https://developers.google.com/speed/pagespeed/moduletarget=_blank>click此处了解更多技术信息。

构建自定义nginx包


Nginx 不支持所谓的模块动态加载,即软件安装后可以自由添加插件或模块。顺便说一句,这既不是nginx中的错误,也不是它的开发人员的缺点;然而,它的优点超出了本教程的范围。因此,将模块添加到nginx的唯一方法是在编译时添加它们。在本教程中,您将通过从Debian weezy Backport源代码构建ngix来将ngx_pagespeed模块添加到nginx中,因为Debian Backport存储库的nginx版本比撰写本教程版本1.4.4时的稳定存储库的版本更新。有关Debian Backports的更多信息,请访问其官方页面:ackports.debian.org。

首先:添加Debian喘息后端库


默认情况下,Debian WEEZY不会在系统中包含Backport存储库,所以我们必须按照以下步骤自行添加:

  • 在系统中您最喜欢的文本编辑器中打开Soures.list文件:
sudo vim /etc/apt/sources.list
  • 将指向Debian Backports存储库的以下两行添加到结尾文件的末尾(确保每一行都插入单独的行):
[....]
deb http://ftp.uk.debian.org/debian wheezy-backports main
deb-src http://ftp.uk.debian.org/debian wheezy-backports main
  • 更新Debian Repositories包列表:
sudo apt-get update

*类型

您可以用离您最近的镜像替换UK镜像;有关所有debian镜像的列表,请访问<a href=http://www.debian.org/mirror/listtarget=_blank>click Here。

第二步:下载nginx后端源包及构建依赖


现在您已经将Backport存储库添加到您的系统中,是时候下载nginx Backport源码包了。不过,在执行此操作之前,您必须下载并安装一些必备程序包,以帮助您构建自定义nginx程序包:

  • 安装Debian基本构建包,顾名思义,这是在系统上构建任何Debian包所必需的:
sudo apt-get install dpkg-dev build-essential zlib1g-dev libpcre3 libpcre3-dev unzip
  • 从Backports库安装nginx版本依赖项;由于Backports库默认处于停用状态,因此必须明确指定apt:
sudo apt-get -t wheezy-backports build-dep nginx

现在您已经满足了前提条件,您可以开始从Backports存储库下载nginx源包:

  • 首先,让我们在主目录中创建一个文件夹,将nginx源包下载到其中:
 cd ~
 mkdir custom-nginx-1.4.4    * # or choose whatever folder name you like*
 cd custom-nginx-1.4.4
  • 下载nginx包源:
sudo apt-get -t wheezy-backports source nginx

第三:编写和修改nginx源包


让我们列出您已下载源包的文件夹的内容:

ls -la

您应该看到三个文件和一个文件夹,该文件夹是将文件解压缩到的文件夹:

如图所示,在编写本教程时,nginx backport源代码包的版本是1.4.4。要开始添加ngx_pagespeed模块,首先需要转到解压缩文件夹nginx-1.4.4中的模块文件夹:

cd nginx-1.4.4/debian/modules

进入模块文件夹后,执行以下命令行(引用自ngx<a href=):

 wget https://github.com/pagespeed/ngx_pagespeed/archive/v1.7.30.1-beta.zip
 unzip v1.7.30.1-beta.zip
 cd ngx_pagespeed-1.7.30.1-beta/
 wget https://dl.google.com/dl/page-speed/psol/1.7.30.1.tar.gz
 tar -xzvf 1.7.30.1.tar.gz

现在,您已经成功地将ngx_pagespeed模块添加到nginx源包的模块文件夹中,准备与其他nginx模块一起构建。但在你做到这一点之前,你还有两个关键步骤要完成:

  • 编辑Debian文件夹中的 Rules** 文件:
sudo vim ~/custom-nginx-1.4.4/nginx-1.4.4/debian/rules

在该文件中,您将找到四个config.Status块(config.status.ull、config.status.light、config.status.Extras、config.status.naxsi);每个块都以**(Configuration_Opts)>@** 结尾。您所要做的就是将--add-module=$(MODULESDIR)/ngx_pagespeed-1.7.30.1-beta\添加到四个块中的每个块中,就在** (CONFigure_OPTS)>@** 行之前,然后保存更改:

  • 增加源程序包版本,因为这将帮助您稍后固定程序包。为此,请使用文本编辑器打开 ChangeLog** 文件:
sudo vim ~/custom-nginx-1.4.4/nginx-1.4.4/debian/changelog

ChangeLog文件的第一行代表当前的程序包版本(1.4.4-1~bpro70+1)和发行版本(weezy-backports),只需在版本号的末尾加上一个连字符,即可添加您的昵称或其他名称:

第四步:构建自定义nginx包


现在,是构建包含ngx_ages_peed模块的定制包的时候了。但是由于构建这个包至少需要10分钟(取决于您机器的速度),我们将使用一个名为Screen 的应用程序,它只是您常规终端窗口中的一个终端。但与普通终端不同的是,Screen在断开与当前外壳会话的连接后,会使在当前外壳会话下运行的进程保持活动状态。这意味着如果在构建包的过程中失去了与您的外壳会话的连接(尤其是那些需要花费时间的),您将不必重新开始。有关如何使用Screen的更多信息,请阅读本教程<a href=https://www.digitalocean.com/community/articles/how-to-install-and-use-screen-on-an-ubuntu-cloud-servertarget=_blank>here.

在创建Screen Session之后,让我们开始构建包:

 cd ~/custom-nginx-1.4.4/nginx-1.4.4
 sudo dpkg-buildpackage -b

现在,您可以让包构建工具在您伸展时执行它们的工作。

一旦命令提示符再次出现,您就知道构建过程已经完成。现在,生成的包正好位于源包文件夹之外:

 cd ~/custom-nginx-1.4.4
 ls -la

您应该会看到类似以下内容的内容:

root@debian-lab2::~/custom-nginx-1.4.4# ls -la
total 72052
drwxr-xr-x 3 root root 4096 Dec 28 13:35 .
drwxr-xr-x 4 root root 4096 Dec 27 03:51 ..
drwxr-xr-x 10 root root 4096 Dec 28 13:34 nginx-1.4.4
-rw-r--r--  1 root root 78168 Dec 28 13:34 nginx-common_1.4.4-1~bpo70+1-custom_all.deb
-rw-r--r--  1 root root 79988 Dec 28 13:34 nginx-doc_1.4.4-1~bpo70+1-custom_all.deb
-rw-r--r--  1 root root 26144390 Dec 28 13:35 nginx-extras-dbg_1.4.4-1~bpo70+1_amd64.deb
-rw-r--r--  1 root root 3481982 Dec 28 13:35 nginx-extras_1.4.4-1~bpo70+1-custom_amd64.deb
-rw-r--r--  1 root root 24335692 Dec 28 13:35 nginx-full-dbg_1.4.4-1~bpo70+1-custom_amd64.deb
-rw-r--r--  1 root root 3286600 Dec 28 13:35 nginx-full_1.4.4-1~bpo70+1-custom_amd64.deb
-rw-r--r--  1 root root 3618406 Dec 28 13:35 nginx-light-dbg_1.4.4-1~bpo70+1-custom_amd64.deb
-rw-r--r--  1 root root 3049594 Dec 28 13:35 nginx-light_1.4.4-1~bpo70+1-custom_amd64.deb
-rw-r--r--  1 root root 3796392 Dec 28 13:35 nginx-naxsi-dbg_1.4.4-1~bpo70+1-custom_amd64.deb
-rw-r--r--  1 root root 356138 Dec 28 13:34 nginx-naxsi-ui_1.4.4-1~bpo70+1-custom_all.deb
-rw-r--r--  1 root root 3092638 Dec 28 13:35 nginx-naxsi_1.4.4-1~bpo70+1-custom_amd64.deb
-rw-r--r--  1 root root 1570640 Nov 28 12:07 nginx_1.4.4-1~bpo70+1.debian.tar.gz
-rw-r--r--  1 root root 2843 Nov 28 12:07 nginx_1.4.4-1~bpo70+1.dsc
-rw-r--r--  1 root root 66716 Dec 28 13:34 nginx_1.4.4-1~bpo70+1-custom_all.deb
-rw-r--r--  1 root root 4922 Dec 28 13:35 nginx_1.4.4-1~bpo70+1-custom_amd64.changes
-rw-r--r--  1 root root 768217 Nov 21 10:28 nginx_1.4.4.orig.tar.gz

第五:安装自定义nginx包


现在你所要做的就是选择你想安装的nginx包。其中有四种,仅在每个模块中封装的模块数量上有所不同;您可以<a href="https://wiki.debian.org/Nginx"target="_blank">在这里找到有关差异的更多信息。我将选择完整版本并安装如下:

sudo dpkg -i nginx-full_1.4.4-1~bpo70+1-custom_amd64.deb nginx-common_1.4.4-1~bpo70+1-custom_all.deb nginx_1.4.4-1~bpo70+1-custom_all.deb

正如您可能已经注意到的,您将在‘nginx-full_1.4.4-1~bpo70+1-custom_amd64.deb’.旁边安装另外两个.deb包这两个是包依赖项,您必须随四个nginx包中的任何一个(Full、light、Extras、naxsi)一起安装。

如果您遇到以下错误消息:

dpkg: dependency problems prevent configuration of nginx-common:
 nginx-common depends on init-system-helpers (>= 1.11~); however:
  Package init-system-helpers is not installed.
 [...]

或者在执行上一个命令后出现任何关于依赖性问题的错误消息,则只需执行以下命令:

sudo apt-get -f install

这将修复您可能遇到的任何依赖项问题,并恢复先前中断的安装。

最后,检查nginx包中的ngx_ages_peed模块是否安装成功:

sudo nginx -V

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

root@debian-lab2:~/shared# nginx -V
nginx version: nginx/1.4.4
TLS SNI support enabled
configure arguments: --prefix=/usr/share/nginx --conf-path=/etc/nginx/nginx.conf 
--error-log-path=/var/log/nginx/error.log --http-client-body-temp-path=/var/lib/nginx/body
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi --http-log-path=/var/log/nginx/access.log 
--http-proxy-temp-path=/var/lib/nginx/proxy --http-scgi-temp-path=/var/lib/nginx/scgi 
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi --lock-path=/var/lock/nginx.lock --pid-path=/run/nginx.pid 
--with-pcre-jit 
--with-debug --with-http_addition_module --with-http_dav_module --with-http_geoip_module 
--with-http_gzip_static_module --with-http_image_filter_module 
--with-http_realip_module 
--with-http_stub_status_module --with-http_ssl_module 
--with-http_sub_module --with-http_xslt_module 
--with-ipv6 --with-mail --with-mail_ssl_module 
--add-module=/root/custom-nginx-1.4.4/nginx-1.4.4/debian/modules/nginx-upload-progress 
--add-module=/root/custom-nginx-1.4.4/nginx-1.4.4/debian/modules/nginx-auth-pam 
--add-module=/root/custom-nginx-1.4.4/nginx-1.4.4/debian/modules/nginx-dav-ext-module 
--add-module=/root/custom-nginx-1.4.4/nginx-1.4.4/debian/modules/nginx-echo 
--add-module=/root/custom-nginx-1.4.4/nginx-1.4.4/debian/modules/nginx-upstream-fair 
--add-module=/root/custom-nginx-1.4.4/nginx-1.4.4/debian/modules/ngx_http_substitutions_filter_module 
--add-module=/root/custom-nginx-1.4.4/nginx-1.4.4/debian/modules/ngx_pagespeed-1.7.30.1-beta

第六步:开启NGX_Pagespeed模块


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

 sudo mkdir -p /var/ngx_pagespeed_cache

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

然后在您喜欢的文本编辑器中打开nginx.conf文件

sudo vim /etc/nginx/nginx.conf

然后在 http 块中添加以下行并保存更改:

##
# ngx_pagespeed module settings
##

pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;

这就是nginx.conf文件的样子:

现在,重启nginx服务器以使更改生效:

sudo service nginx restart

要确认已成功启用NGX_Pagespeed模块,请执行以下命令:

 sudo apt-get install curl
 curl -I -p http://localhost|grep X-Page-Speed

然后,您应该在输出中看到X-Page-Speed标题:

最后,在您网站的虚拟主机文件中的每个服务器块中添加以下行,该文件位于/etc/nginx/ites-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" { }
location /ngx_pagespeed_statistics { allow 127.0.0.1; deny all; }
location /ngx_pagespeed_global_statistics { allow 127.0.0.1; deny all; }
location /ngx_pagespeed_message { allow 127.0.0.1; deny all; }
location /pagespeed_console { allow 127.0.0.1; deny all; }

最后:固定您的自定义nginx包


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

  • 在 ** /etc/apt/preferences.d 中创建一个新文件:
sudo vim /etc/apt/preferences.d/nginx
  • 然后粘贴以下行并保存[请确保将Pin版本替换为您之前设置的自定义版本]:
Package: nginx
Pin: version 1.4.4-1~bpo70+1-custom
Pin-Priority: 1001

*免责声明

拥有自己的定制包有一个缺点,那就是每当安全漏洞打补丁时,都要独自负责更新。这意味着简单地运行apt-get升级不会对您的包做任何事情,因为您已经固定了它。因此,确保定期检查是否发布了新的安全更新。

Submitted by: Saleh Salem
Published At
Categories with 技术
Tagged with
comments powered by Disqus