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

介绍

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

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

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

先决条件

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

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

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

sudo yum install wget curl unzip gcc-c++ pcre-devel zlib-devel

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

mkdir ~/custom-nginx

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

cd ~/custom-nginx

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

sudo wget http://nginx.org/download/nginx-1.8.0.tar.gz

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

sudo tar zxvf nginx-1.8.0.tar.gz

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

ls ~/custom-nginx

结果应如下所示:

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文件夹:

cd nginx-1.8.0/src/http/modules/

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

sudo wget https://github.com/pagespeed/ngx_pagespeed/archive/master.zip

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

sudo unzip master.zip

这将在~/custom-nginx/nginx-1.8.0/src/http/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.4.6/debian/modules/ngx_pagespeed目录中psol包解压缩:

sudo tar -xzvf 1.9.32.6.tar.gz

第2步 - 配置源并编译它

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

cd ~/custom-nginx/nginx-1.8.0/

使用以下命令运行configure source:

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替换为您的用户。

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

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

sudo make

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

sudo make install

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

sudo ln -s /usr/local/nginx/conf/ /etc/nginx

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

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

sudo ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx

第3步 - 创建启动脚本

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

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

sudo nano /etc/init.d/nginx

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

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

sudo chmod +x /etc/init.d/nginx

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

sudo service nginx start

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

sudo chkconfig nginx on

第4步 - 启用Pagespeed模块

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

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

sudo mkdir -p /var/ngx_pagespeed_cache

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

sudo chown -R nobody:nobody /var/ngx_pagespeed_cache

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

sudo nano /etc/nginx/nginx.conf

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

##
# 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

...
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服务器以使更改生效:

sudo service nginx restart

第5步 - 测试安装

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

sudo /usr/sbin/nginx -V

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

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标题:

curl -I -p http://localhost| grep X-Page-Speed

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

OutputX-Page-Speed: 1.9.32.6-7321

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

结论

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

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


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

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

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

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏LIN_ZONE

ubuntu16.04中supervisor安装与简单使用(转载)

supervisor 可以将每个进程分别写成一个文件,supervisor 的进程文件放在 /etc/supervisor/conf.d/ 目录下,本例创建 t...

11840
来自专栏Java帮帮-微信公众号-技术文章全总结

Hadoop,zookeeper,HBase,Spack集群环境搭建【面试+工作】

Hadoop,zookeeper,HBase,Spark集群环境搭建【面试+工作】

25920
来自专栏刺客博客

Linux下使用mysqldump进行数据库备份恢复

mysqldump -uroot -proot  --databases data >1.sql

1.2K20
来自专栏Hongten

Windows7下面手把手教你安装Django

在搜索了一些资料发现,对于Django的安装,详细的真的很少,都说的很简化,然而,这篇blog可以手把手教你成功安装Django

10320
来自专栏Python爬虫与数据挖掘

在Ubuntu14.04中安装Py3和切换Py2和Py3环境

前几天小编给大家分享了如何安装Ubuntu14.04系统,感兴趣的小伙伴可以戳这篇文章:手把手教你在VMware虚拟机中安装Ubuntu14.04系统。今天小...

7520
来自专栏性能与架构

如何高效查看 Docker 日志

开发基于 Docker 的应用时,用好 log 可以大大提高排错效率,下面就是几个常用的 log 操作技巧:

5.2K50
来自专栏电光石火

如何让nginx显示文件夹目录

vi /etc/nginx/conf.d/default.conf

215100
来自专栏技术博文

git常用命令

克隆分支(ssh方式) git clone git@xxx:branch.git#xxx代表服务器 设置全局的用户名和邮箱 git config --globa...

28680
来自专栏电光石火

如何让nginx显示文件夹目录

1. 如何让nginx显示文件夹目录 vi /etc/nginx/conf.d/default.conf 添加如下内容: location / ...

216100
来自专栏用户2442861的专栏

局域网聊天工具(可发送图片与文件)

http://blog.csdn.net/sunshinestation/article/details/4437404

93110

扫码关注云+社区

领取腾讯云代金券