如何在 CentOS 7 上为 Nginx 添加 ngx_pagespeed

简介

NGX_Pagespeed,或简称Pages,是一个Nginx模块,旨在通过减少资源的大小来自动优化您的站点,从而减少客户端浏览器需要加载它的时间。如果您还不熟悉,请查看它的官方site.

本文将指导您完成Nginx的页面速度模块的安装和配置。重要的是要知道,Nginx不支持模块的动态加载,这些模块在其他Web服务器上可用,比如阿帕奇。由于Nginx不支持此功能,因此需要从源码构建Nginx才能添加模块。

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

前提条件

本指南是为CentOS7编写的。也有Ubuntu14.04 versionDebian8 version]可用。

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

  • 一颗CentOS 7水滴
  • 非超级用户sudo(有关详细信息,请查看CentOS 7的初始服务器设置。)

除非另有说明,否则本教程中需要超级用户权限的所有命令都应该以具有sudo权限的非超级用户身份运行。

Step 1-下载源代码及其依赖项

让我们从确保我们拥有编译和测试Nginx所需的所有软件开始。请运行以下命令:

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

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

1mkdir ~/custom-nginx

更改到此新创建的目录:

1cd ~/custom-nginx

然后,从其官网.)下载该目录下的ngix源码包目前,最新版本为1.8.0,可以使用以下命令下载:

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

之后,使用以下命令解压新下载的包:

1sudo tar zxvf nginx-1.8.0.tar.gz

为了确认我们的想法一致,请列出~/Custom-nginx文件夹的内容:

1ls ~/custom-nginx

结果应该如下所示:

1[secondary_label Output of ls ~/custom-nginx]
2nginx-1.8.0 nginx-1.8.0.tar.gz

如您所见,在撰写本教程时,Nginx源包的版本是1.8.0。要开始添加NGX_Pagespeed模块,您首先需要进入解压文件夹nginx-1.8.0中的modes文件夹:

1cd nginx-1.8.0/src/http/modules/

在此目录中,使用以下命令从其github repository]下载最新的ngx_pagespeed源代码归档文件:

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

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

1sudo unzip master.zip

这将在您的~/custom-nginx/nginx-1.8.0/src/http/modules/目录中创建一个名为ngx_pagespeed-master的新目录。为方便起见,请使用以下命令将此目录重命名为ngx_pagespeed

1sudo mv ngx_pagespeed-master ngx_pagespeed

进入新的ngx_pagespeed目录:

1cd ngx_pagespeed

从那里下载编译所需的页面速度优化库(PSOL):

1sudo 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包:

1sudo tar -xzvf 1.9.32.6.tar.gz

步骤二-配置源代码并编译

至此,您已经准备好配置Nginx源代码并包含页面速度模块。转到Nginx源文件的父目录:

1cd ~/custom-nginx/nginx-1.8.0/

在那里运行configure the source with the command:

1sudo ./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/.它确保页面速度模块将成为Nginx编译的一部分。请确保在此路径中用您的用户替换YOUR_USER。

为方便起见,我们还定制了一些其他设置,例如日志文件的位置和服务器应该在其下运行的用户/组。有关可定制内容的更多信息,请查看编译时options.]的文档

配置完成后,使用以下命令开始编译:

1sudo make

这将需要长达10分钟的时间,这取决于您的水滴的资源。之后,您可以使用以下命令安装该软件:

1sudo make install

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

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

通过该命令,您可以在配置文件通常所在的/etc/nginx/目录中找到配置文件。

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

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

第三步-创建启动脚本

前面的安装过程会处理一些普通的任务,比如创建必要的noone用户和组,nginx将在这些用户和组下运行。但是,您仍然需要手动创建启动脚本。幸运的是,对于CentOS7上的ngix,nginx.com.上已经有了一个现成的版本

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

1sudo nano /etc/init.d/nginx

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

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

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

之后,您可以使用以下命令第一次启动nginx:

1sudo service nginx start

要确保每次使用Drop启动和停止Nginx时,请使用以下命令将其添加到默认运行级别:

1sudo chkconfig nginx on

第四步-开启Pagespeed模块

现在,您已经安装了Nginx。下一步是启用ngx_ages_peed模块。

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

1sudo mkdir -p /var/ngx_pagespeed_cache

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

1sudo chown -R nobody:nobody /var/ngx_pagespeed_cache

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

1sudo nano /etc/nginx/nginx.conf

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

 1[label  /etc/nginx/nginx.conf]
 2##
 3# Pagespeed main settings
 4
 5pagespeed on;
 6pagespeed FileCachePath /var/ngx_pagespeed_cache;
 7
 8# Ensure requests for pagespeed optimized resources go to the pagespeed
 9# handler and no extraneous headers get set.
10
11location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { add_header "" ""; }
12location ~ "^/ngx_pagespeed_static/" { }
13location ~ "^/ngx_pagespeed_beacon" { }

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

/etc/nginx/nginx.conf文件现在应该是这样的:

 1[label /etc/nginx/nginx.conf]
 2...
 3http {
 4    include mime.types;
 5    default_type application/octet-stream;
 6
 7    #log_format main  '$remote_addr - $remote_user [$time_local] "$request" '
 8    #                  '$status $body_bytes_sent "$http_referer" '
 9    #                  '"$http_user_agent" "$http_x_forwarded_for"';
10
11    #access_log logs/access.log main;
12
13    sendfile on;
14    #tcp_nopush on;
15
16    #keepalive_timeout 0;
17    keepalive_timeout 65;
18
19    #gzip on;
20
21    server {
22        listen 80;
23        server_name localhost;
24
25        #charset koi8-r;
26
27        #access_log logs/host.access.log main;
28
29        ##
30        # Pagespeed main settings
31
32        pagespeed on;
33        pagespeed FileCachePath /var/ngx_pagespeed_cache;
34
35        # Ensure requests for pagespeed optimized resources go to the pagespeed
36        # handler and no extraneous headers get set.
37
38        location ~ "\.pagespeed\.([a-z]\.)?[a-z]{2}\.[^.]{10}\.[^.]+" { add_header "" ""; }
39        location ~ "^/ngx_pagespeed_static/" { }
40        location ~ "^/ngx_pagespeed_beacon" { }
41
42        location / {
43            root html;
44            index index.html index.htm;
45        }
46...

此外,请确保将分页速度配置行添加到_EVERY_ADVERTIAL服务器块文件中。

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

1sudo service nginx restart

Step 5-测试安装

要检查是否已成功安装ngx_pagespeed模块,请按如下方式运行nginx二进制文件:

1sudo /usr/sbin/nginx -V

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

1[secondary_label Output]
2nginx version: nginx/1.8.0
3...
4configure arguments: --add-module=/home/your_user/custom-nginx/nginx-1.8.0/src/http/modules/ngx_pagespeed/
5...

以上并不意味着pagespeed已经启用并适用于您的网站。要确认这一点,您可以使用curl,一个用于客户端URL传输的工具和库。使用它检查X-Page-Speed头,如下所示:

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

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

1[secondary_label Output]
2X-Page-Speed: 1.9.32.6-7321

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

总结

这就是如何使用定制模块Pagespeed构建Nginx的方法。这些步骤对Nginx中尚未提供的任何其他模块都有效。此外,从源代码安装软件包的整个过程与您可能需要定制的其他软件包类似。但不要忘记,当有新版本时,您将不得不自己维护和重新安装这些包。

Published At
Categories with 技术
comments powered by Disqus