如何在Debian8上将ngx pagespeed添加到Nginx
介绍
ngx_pagespeed,或者只是 pagespeed,是一个 Nginx 模块,旨在通过减少其资源的大小来自动优化您的站点,从而减少客户端浏览器加载它的时间。 如果您还不熟悉它,请查看它的官方网站。
本文将指导您完成 Nginx 的 pagespeed 模块的安装和配置。 重要的是要知道 Nginx 不支持 Dynamic Loading of Modules 在其他 Web 服务器(例如 Apache)中可用。 由于 Nginx 不支持此功能,因此您需要从源代码构建 Nginx 以添加模块。
拥有自己的自定义包有一个缺点——当有新版本时,你全权负责更新它。 在权衡使用 ngx_pagespeed 的利弊时要考虑到这一点。
先决条件
本指南是为 Debian 8 编写的。 还提供 Ubuntu 14.04 版本 和 CentOS 7 版本。
在学习本教程之前,请确保您完成以下先决条件:
- 一个 Debian 8 液滴
- 非 root sudo 用户(查看 Initial Server Setup with Debian 8 了解详情。)
除非另有说明,本教程中所有需要 root 权限的命令都应以具有 sudo 权限的非 root 用户身份运行。
第 1 步 — 下载源代码及其依赖项
首先,我们必须满足运行 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.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
文件夹:
cd nginx-1.6.2/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.6.2/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.6.2/debian/modules/ngx_pagespeed
目录下的psol包:
sudo tar -xzvf 1.9.32.6.tar.gz
第 2 步 — 自定义源
此时您已准备好自定义编译规则并在安装中包含 ngx_pagespeed。 为此,使用您喜欢的编辑器编辑文件 ~/custom-nginx/nginx-1.6.2/debian/rules
:
sudo nano ~/custom-nginx/nginx-1.6.2/debian/rules
有四种不同的场景来构建 Nginx 的包:common
、full
、light
和 extras
。 顾名思义,common
包含没有服务器的常见 Nginx 文件,full
包含一个带有最流行模块的服务器,light
创建一个只有基本模块的服务器,和 extras
用于服务器,其中包含一些额外的花哨模块。
假设您需要一个 light
Nginx 设置和 ngx_pagespeed。 因此,添加 light_configure_flags
配置块的末尾添加以下行:
~/custom-nginx/nginx-1.6.2/debian/rules
--add-module=$(MODULESDIR)/ngx_pagespeed
请不要忘记在上一行添加反斜杠 (\
)。 整个配置块应该如下所示:
~/custom-nginx/nginx-1.6.2/debian/rules
light_configure_flags := \ $(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
如果您发现不同的 Nginx 设置更方便,您也可以将同一行添加到其他构建方案中。
接下来,增加源包版本,因为这将帮助您稍后固定包。 为此,请使用文本编辑器打开 changelog
文件:
sudo nano ~/custom-nginx/nginx-1.6.2/debian/changelog
changelog
文件的第一行代表当前软件包版本 (1.6.2-5
) 和 Debian 发行版名称 (unstable
)。 在版本号的末尾添加一个自定义标签,例如 pagespeed
,前面带有一个连字符,如下所示:
nginx (1.6.2-5-pagespeed) unstable; urgency=medium
第 3 步 — 使用 Pagespeed 模块构建和安装 Nginx
现在您已经自定义构建以包含 ngx_pagespeed 模块,您可以构建 Nginx。
使用以下命令转到目录 ~/custom-nginx/nginx-1.6.2/
:
cd ~/custom-nginx/nginx-1.6.2/
从这里,运行命令来构建新的自定义 Nginx 包:
sudo dpkg-buildpackage -b
构建过程最多需要大约 10 分钟。 如果您担心在此期间可能会断开连接,您可以尝试使用 screen
,如 this article 中所述。
如果您已按照所有说明进行操作,则构建过程应完成且不会出现任何错误。 要查找新的自定义 Nginx 包,请使用以下命令转到 ~/custom-nginx/
的一个目录:
cd ~/custom-nginx/
列出~/custom-nginx/
目录的内容:
ls ~/custom-nginx/
你应该找到很多 .deb
包。 您需要的称为 nginx-common_1.6.2-5-pagespeed_all.deb
(包含常见的 Nginx 文件)和 nginx-light_1.6.2-5-pagespeed_amd64.deb
(包含您的自定义轻服务器)。 如果您在 changelog
文件中指定了不同的自定义标签,则 pagespeed
部分可能会有所不同。
要使用 pagespeed 模块安装自定义 Nginx,请运行以下命令:
sudo dpkg -i nginx-common_1.6.2-5-pagespeed_all.deb nginx-light_1.6.2-5-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.6.2 ... --add-module=/home/your_user/custom-nginx/nginx-1.6.2/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.6.2-5-pagespeed Pin-Priority: 1001
请确保指定您决定使用的 Nginx 包。 在我们的示例中,它是 nginx-light
。 此外,请指定确切的版本以及您的自定义标签,例如 1.6.2-5-pagespeed
。
结论
这就是您可以使用自定义模块 pagespeed 构建 Nginx 的方式。 这些步骤适用于 Nginx 中尚不可用的任何其他模块。 此外,从源代码安装软件包的整个过程与您可能需要自定义的其他软件包类似。 只是不要忘记,当有新版本时,您必须自己维护和重新安装这些软件包。