介绍
ngx_pagespeed简称pagespeed,是一个Nginx模块,旨在通过减少资源的大小以及客户端浏览器加载它所需的时间来自动优化您的网站。如果您还不熟悉它,请查看其官方网站。本教程将指导您完成Nginx的pagespeed模块的安装和配置。重要的是要知道Nginx不支持其他Web服务器(如Apache)中可用的模块的动态加载。由于Nginx不支持此功能,因此您需要从源代码构建Nginx以添加模块。
本教程是为Debian 8编写的。在学习本教程之前,请确保具备以下内容:
sudo
命令的非root账号的Debian8服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。除非另有说明,否则本教程中需要root权限的所有命令都应作为具有sudo权限的非root用户运行。
我们必须满足运行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-nginx
nginx-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
此时,您已准备好自定义编译规则并在安装中包含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
配置块的末尾添加行:
--add-module=$(MODULESDIR)/ngx_pagespeed
请不要忘记在上一行添加反斜杠(\
),整个配置块应如下所示:
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
现在您已自定义构建以包含ngx_pagespeed模块,下面准备安装Nginx。
使用以下命令转到目录~/custom-nginx/nginx-1.6.2/
下:
cd ~/custom-nginx/nginx-1.6.2/
从这里,运行命令以构建新的自定义Nginx包:
sudo dpkg-buildpackage -b
构建过程最多需要10分钟。如果您担心在此期间可能会断开连接,可以尝试用screen
进行操作。
如果您已按照所有说明进行操作,则构建完成且构建过程不会出现任何错误。要查找新的自定义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
你现在安装了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
块中并保存更改:
##
# Pagespeed Settings
##
pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;
您可以在http
块中的任何位置添加这些行,在我们的示例中,我们将它添加到块的末尾。
这就是/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;
...
此外,您需要在位于/etc/nginx/sites-available
文件夹下的每个 server
块文件中添加pagespeed配置行。例如,编辑/etc/nginx/sites-available/default
文件:
sudo nano /etc/nginx/sites-available/default
将以下内容添加到server
块中:
# 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
要检查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
以上并不意味着页面速度已启用并适用于您的网站。要确认这一点,您可以使用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。
为了防止您的自定义Nginx软件包被apt
更新的Nginx版本替换,您应该通过以下步骤锁定(保持)您的软件包升级:
在以下位置/etc/apt/preferences.d
创建新nginx
文件:
sudo nano /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
。
这就是您如何用自定义模块构建Nginx,pagespeed的教程。这些步骤适用于Nginx中尚未提供的任何其他模块的情况。此外,从源代码安装软件包的整个过程与您可能需要自定义的其他软件包类似。只是不要忘记,当有新版本时,您必须自己维护和重新安装这些软件包。
想要了解更多关于Nginx等开源信息教程,请前往腾讯云+社区学习更多知识。
参考文献:《How To Add ngx_pagespeed to Nginx on Debian 8》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。