简介
ngx_Pagespeed 只是添加到ngix Web服务器的一个模块,旨在通过减少互联网浏览器加载网页的时间来加快网站速度-<a href=https://developers.google.com/speed/pagespeed/module
target=_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/list
target=_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-server
target=_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升级
不会对您的包做任何事情,因为您已经固定了它。因此,确保定期检查是否发布了新的安全更新。