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

如何在CentOS 7上将ngx_pagespeed添加到Nginx

原创
作者头像
angel_郁
修改2018-09-25 10:23:23
1.1K0
修改2018-09-25 10:23:23
举报
文章被收录于专栏:云计算教程系列

介绍

ngx_pagespeed,或者pagespeed,是一个Nginx模块,旨在通过精简资源的规模来缩短客户端浏览器加载它所需的时间,从而自动优化您的网站。如果您还不熟悉它,请查看其官方网站

本文将指导您完成Nginx的pagespeed模块的安装和配置。在此之前,我们需要知道的一件重要的事情是,Nginx不支持其他Web服务器(如Apache)中可用的模块的动态加载功能。所以您需要从源代码构建Nginx,借此来添加模块。

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

先决条件

要完成本教程,你需要具备以下内容:

  • 一台已经设置好可以使用sudo命令的非root账号的CentOS 7服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器。第1步 - 下载源及其依赖项

让我们首先确保我们拥有编译和测试Nginx所需的所有软件。请运行命令:

代码语言:javascript
复制
sudo yum install wget curl unzip gcc-c++ pcre-devel zlib-devel

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

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

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

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

然后,从其官方站点下载此目录中的Nginx源包。目前,最新版本为1.8.0,可以使用以下命令下载:

代码语言:javascript
复制
sudo wget http://nginx.org/download/nginx-1.8.0.tar.gz

之后,使用以下命令提取新下载的资源包:

代码语言:javascript
复制
sudo tar zxvf nginx-1.8.0.tar.gz

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

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

结果应如下所示:

代码语言:javascript
复制
Output of ls ~/custom-nginx 
nginx-1.8.0  nginx-1.8.0.tar.gz

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

代码语言:javascript
复制
cd nginx-1.8.0/src/http/modules/

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

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

下载完成后,使用如下unzip实用程序解压缩:

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

这将在~/custom-nginx/nginx-1.8.0/src/http/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步 - 配置源并编译它

此时,您已准备好配置Nginx源并包含pagespeed模块。首先转到Nginx源的父目录:

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

使用以下命令运行configure source:

代码语言:javascript
复制
sudo ./configure --add-module=/home/your_user/custom-nginx/nginx-1.8.0/src/http/modules/ngx_pagespeed/ --user=nobody --group=nobody --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid

上面最重要的配置选项是--add-module=/home/your_user/custom-nginx/nginx-1.8.0/src/http/modules/ngx_pagespeed/,因为它可以确保pagespeed模块将成为Nginx编译的一部分。同时,也请确保在此路径中将your_user替换为您的用户。

为方便起见,我们还定制了一些其他设置,例如日志文件的位置以及运行服务器的用户/组。有关可自定义内容的更多信息,请查看文档以获取编译时选项

配置完成后,使用以下命令启动编译:

代码语言:javascript
复制
sudo make

这将需要大约十分钟,具体时间取决于您的腾讯CVM资源。之后,您可以使用以下命令安装软件:

代码语言:javascript
复制
sudo make install

您可以在 /usr/local/nginx目录中找到安装的自定义Nginx。为了使它更方便,我们可以创建两个符号链接。首先是配置文件:

代码语言:javascript
复制
sudo ln -s /usr/local/nginx/conf/ /etc/nginx

此命令将允许您在/etc/nginx/目录中查找配置文件,一般来说,配置文件通常都储存在这个目录中。

您还应该创建指向/usr/sbin/目录中主二进制文件的符号链接,以便您可以更轻松地找到它并将其包含在启动脚本中。我们稍后将使用的启动脚本也需要这个。为此,请运行以下命令:

代码语言:javascript
复制
sudo ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx

第3步 - 创建启动脚本

之前的安装过程负责一些简单的任务,例如创建必要的nobody用户和组,Nginx将在其下运行。但是,您仍然需要手动创建启动脚本。幸运的是,对于CentOS 7上的Nginx,已经有一个在nginx.com上可以随时使用。

首先,在目录/etc/init.d/中创建一个新文件:

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

然后转到https://www.nginx.com/resources/wiki/start/topics/examples/redhatnginxinit/,复制脚本,并将其粘贴到该新文件中。

最后,通过运行以下命令来执行此脚本:

代码语言:javascript
复制
sudo chmod +x /etc/init.d/nginx

之后,您可以使用以下命令首次启动Nginx:

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

如果要使用腾讯CVM启动和停止Nginx,请使用以下命令将其添加到默认运行级别:

代码语言:javascript
复制
sudo chkconfig nginx on

第4步 - 启用Pagespeed模块

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

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

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

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

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

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

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

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

代码语言:javascript
复制
##
# Pagespeed main settings
​
pagespeed on;
pagespeed FileCachePath /var/ngx_pagespeed_cache;
​
# 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" { }

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

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

/etc/nginx/nginx.conf

代码语言:javascript
复制
...
http {
    include       mime.types;
    default_type  application/octet-stream;
​
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
​
    #access_log  logs/access.log  main;
​
    sendfile        on;
    #tcp_nopush     on;
​
    #keepalive_timeout  0;
    keepalive_timeout  65;
​
    #gzip  on;
​
    server {
        listen       80;
        server_name  localhost;
​
        #charset koi8-r;
​
        #access_log  logs/host.access.log  main;
​
        ##
        # Pagespeed main settings
​
        pagespeed on;
        pagespeed FileCachePath /var/ngx_pagespeed_cache;
​
        # 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 / {
            root   html;
            index  index.html index.htm;
        }
...

此外,请确保将pagespeed配置行添加到您可能拥有的每个其他server块文件中。

最后,重启Nginx服务器以使更改生效:

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

第5步 - 测试安装

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

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

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

代码语言:javascript
复制
Output
nginx version: nginx/1.8.0
...
configure arguments: --add-module=/home/your_user/custom-nginx/nginx-1.8.0/src/http/modules/ngx_pagespeed/
...

以上并不意味着pagespeed已启用并适用于您的网站。要确认这一点,您可以使用在客户端进行URL转换的工具和库--curl,用它来检查这样的X-Page-Speed标题:

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

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

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

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

结论

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

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


参考文献:《How To Add ngx_pagespeed to Nginx on CentOS 7》

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

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

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

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

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