前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在Ubuntu 14.04上将ngx_pagespeed添加到Nginx

如何在Ubuntu 14.04上将ngx_pagespeed添加到Nginx

原创
作者头像
挺问中原
修改2018-09-20 14:59:02
7470
修改2018-09-20 14:59:02
举报

介绍

ngx_pagespeed,或者只是pagespeed,是一个Nginx模块,旨在通过减少资源的大小以及客户端浏览器加载它所需的时间来自动优化您的网站。如果您还不熟悉它,请查看其官方网站

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

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

先决条件

本指南是为Ubuntu 14.04编写的。

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

  • 一个安装了Ubuntu 14.04 腾讯CVM
  • 拥有sudo权限的非root用户(一台已经设置好可以使用sudo命令的非root账号的Ubuntu服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。)

除非另有说明,否则本教程中需要root权限的所有命令都应作为具有sudo权限的非root用户运行。

第1步 - 下载源及其依赖项

在此之前,我们必须通过apt-get更新确保包列表可用:

代码语言:javascript
复制
sudo apt-get update

接下来,我们必须满足运行Nginx所需的所有依赖项。为此,请运行以下命令:

代码语言:javascript
复制
sudo apt-get build-dep nginx

之后,在主目录中创建一个文件夹以下载Nginx的源包:

代码语言:javascript
复制
mkdir ~/custom-nginx

切换到这个新创建的目录:

代码语言:javascript
复制
cd ~/custom-nginx

然后,使用以下命令在此目录中下载Nginx源包:

代码语言:javascript
复制
sudo apt-get source nginx

要确认我们在同一页面上,请列出该文件夹的内容~/custom-nginx

代码语言:javascript
复制
ls ~/custom-nginx

结果应如下所示:

代码语言:javascript
复制
Output of ls ~/custom-nginx
nginx-1.4.6  nginx_1.4.6-1ubuntu3.3.debian.tar.gz  nginx_1.4.6-1ubuntu3.3.dsc  nginx_1.4.6.orig.tar.gz

如您所见,在编写本教程时,Nginx源包的版本是1.4.6。要开始添加ngx_pagespeed模块,首先需要转到`nginx-1.4.6解压缩文件夹中的modules文件夹:

代码语言:javascript
复制
cd nginx-1.4.6/debian/modules

在此目录中,使用以下命令从其Github存储库下载最新的ngx_pagespeed源存档:

代码语言:javascript
复制
sudo wget https://github.com/pagespeed/ngx_pagespeed/archive/master.zip

下载完成后,您将需要该unzip实用程序来提取它。如果您还没有 unzip,请使用以下命令安装它:

代码语言:javascript
复制
sudo apt-get install unzip

之后,使用以下命令提取下载的文件:

代码语言:javascript
复制
sudo unzip master.zip

这将在~/nginx-1.4.6/debian/modules目录创建一个名为ngx_pagespeed-master的新目录。为方便起见,使用以下命令将此目录重命名为ngx_pagespeed

代码语言:javascript
复制
sudo mv ngx_pagespeed-master ngx_pagespeed

进入新ngx_pagespeed目录:

代码语言:javascript
复制
cd ngx_pagespeed

从那里,下载编译所需的PageSpeed优化库(psol):

代码语言:javascript
复制
sudo wget https://dl.google.com/dl/page-speed/psol/1.9.32.6.tar.gz

如果在阅读本文时psol存档的链接不起作用,请跳过此步骤。如果在后续步骤中编译期间缺少库,则会看到错误,其中包含有关如何在以后获取程序包的更新说明。

最后,解压缩~/custom-nginx/nginx-1.4.6/debian/modules/ngx_pagespeed目录中的psol包:

代码语言:javascript
复制
sudo tar -xzvf 1.9.32.6.tar.gz

第2步 - 自定义源

此时,您已准备好自定义编译规则并把ngx_pagespeed包含在安装中。为此,使用您喜欢的编辑器编辑~/custom-nginx/nginx-1.4.6/debian/rules文件:

代码语言:javascript
复制
sudo nano ~/custom-nginx/nginx-1.4.6/debian/rules

这里有五种不同的场景的建筑Nginx的包:corefulllightextrasnaxsi。正如他们的名字所暗示的那样,common包含没有服务器的常见Nginx文件,full包括一个拥有最流行模块的服务器,light创造一个只有必要模块的服务器,extras是用于带有一些额外花哨模块的服务器,另外还有naxsi是naxsi模块的补充(Web应用程序防火墙)。

我们假设你需要一个lightNginx设置加上ngx_pagespeed。因此,在light_configure_flags配置块的末尾 添加以下行:

代码语言:javascript
复制
--add-module=$(MODULESDIR)/ngx_pagespeed \

请不要忘记在行的末尾添加反斜杠(\)。整个配置块应如下所示:

代码语言:javascript
复制
config.status.light: config.env.light
        cd $(BUILDDIR_light) && ./configure  \
            $(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 \
            >$@
        touch $@

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

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

代码语言:javascript
复制
sudo nano ~/custom-nginx/nginx-1.4.6/debian/changelog

changelog文件的第一行代表当前包版本(1.4.6-1ubuntu3.3)和Ubuntu代号(trusty)。添加一个自定义标记,例如pagespeed在版本号末尾加一个连字符,如下所示:

代码语言:javascript
复制
nginx (1.4.6-1ubuntu3.3-pagespeed) trusty-proposed; urgency=medium

第3步 - 使用Pagespeed模块构建和安装Nginx

现在您已经自定义了构建以包含ngx_pagespeed模块,您已准备好构建Nginx。

使用以下命令转到~/custom-nginx/nginx-1.4.6/目录:

代码语言:javascript
复制
cd ~/custom-nginx/nginx-1.4.6/

从这里,运行命令以构建新的自定义Nginx二进制包:

代码语言:javascript
复制
sudo dpkg-buildpackage -b

构建过程最多需要大约10分钟。如果您担心在此期间可能会断开连接,可以尝试用screen进行操作。

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

代码语言:javascript
复制
cd ~/custom-nginx/

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

代码语言:javascript
复制
ls ~/custom-nginx/

你应该找到很多.deb包。您需要的那些nginx-common_1.4.6-1ubuntu3.3-pagespeed_all.deb(包含常见的Nginx文件)和nginx-light_1.4.6-1ubuntu3.3-pagespeed_amd64.deb(包含您的自定义光服务器)。如果您在changelog文件中指定了不同的自定义标记,则pagespeed部分可能会有所不同。

要使用pagespeed模块安装自定义Nginx,请运行以下命令:

代码语言:javascript
复制
sudo dpkg -i nginx-common_1.4.6-1ubuntu3.3-pagespeed_all.deb nginx-light_1.4.6-1ubuntu3.3-pagespeed_amd64.deb

第4步 - 启用Pagespeed模块

你现在安装了Nginx。下一步是启用ngx_pagespeed模块。

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

代码语言:javascript
复制
sudo mkdir -p /var/ngx_pagespeed_cache

确保将此文件夹的所有权更改为Nginx用户,以便Web服务器可以在其中存储文件:

代码语言:javascript
复制
sudo chown -R www-data:www-data /var/ngx_pagespeed_cache

然后,在您喜欢的文本编辑器中打开主Nginx配置文件nginx.conf,如下所示:

代码语言:javascript
复制
sudo nano /etc/nginx/nginx.conf

在此文件中,将以下行添加到http块中并保存更改:

代码语言:javascript
复制
##
# Pagespeed Settings
##
​
pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;

您可以在http块中的任何位置添加这些行,但在我们的示例中,我们将它添加到块的末尾。

这就是/etc/nginx/nginx.conf文件现在的样子:

代码语言:javascript
复制
...
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每个 server块文件中。例如,编辑/etc/nginx/sites-available/default文件:

代码语言:javascript
复制
sudo nano /etc/nginx/sites-available/default

将以下内容添加到server块的末尾:

代码语言:javascript
复制
#  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服务器以使更改生效:

代码语言:javascript
复制
sudo service nginx restart

第5步 - 测试安装

要检查ngx_pagespeed模块是否已成功安装,请运行Nginx二进制文件,如下所示:

代码语言:javascript
复制
sudo /usr/sbin/nginx -V

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

代码语言:javascript
复制
Output
nginx version: nginx/1.4.6
...
--add-module=/home/your_user/custom-nginx/nginx-1.4.6/debian/modules/ngx_pagespeed

以上并不意味着页面速度已启用并适用于您的网站。要确认这一点,您可以使用curl工具和库进行客户端URL传输。如果curl尚未安装,请使用以下命令安装它:

代码语言:javascript
复制
sudo apt-get install curl

之后检查X-Page-Speed标题如下:

代码语言:javascript
复制
curl -I -p http://localhost| grep X-Page-Speed

如果ngx_pagespeed模块工作正常,您应该在输出中看到它及其版本:

代码语言:javascript
复制
Output
X-Page-Speed: 1.9.32.6-7321

如果您没有看到此标题,请确保已按照上一步骤中的说明启用了pagespeed。

第6步 - 固定自定义Nginx包

为了防止将来apt使用更新版本的Nginx 替换您的自定义Nginx软件包,您应该通过以下步骤锁定(保持)您的软件包升级:

/etc/apt/preferences.d位置创建新nginx文件:

代码语言:javascript
复制
sudo nano /etc/apt/preferences.d/nginx

然后粘贴以下行并保存:

代码语言:javascript
复制
Package: nginx-light
Pin: version 1.4.6-1ubuntu3.3-pagespeed
Pin-Priority: 1001

请确保指定您决定使用的Nginx包。在我们的例子中,它是nginx-light。另外,请指定确切版本以及自定义标记如1.4.6-1ubuntu3.3-pagespeed

结论

这就是你如何用自定义模块构建Nginx,pagespeed。这些步骤适用于Nginx中尚未提供的任何其他模块。此外,从源代码安装软件包的整个过程与您可能需要自定义的其他软件包类似。只是不要忘记,当有新版本时,您必须自己维护和重新安装这些软件包。

更多Ubuntu教程请前往腾讯云+社区学习更多知识。

参考文献:《How To Add ngx_pagespeed to Nginx on Ubuntu 14.04》

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 先决条件
  • 第1步 - 下载源及其依赖项
  • 第2步 - 自定义源
  • 第3步 - 使用Pagespeed模块构建和安装Nginx
  • 第4步 - 启用Pagespeed模块
  • 第5步 - 测试安装
  • 第6步 - 固定自定义Nginx包
  • 结论
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档