如何在CentOS7上将ngx pagespeed添加到Nginx
介绍
ngx_pagespeed,或者只是 pagespeed,是一个 Nginx 模块,旨在通过减少其资源的大小来自动优化您的站点,从而减少客户端浏览器加载它的时间。 如果您还不熟悉它,请查看它的官方网站。
本文将指导您完成 Nginx 的 pagespeed 模块的安装和配置。 重要的是要知道 Nginx 不支持 Dynamic Loading of Modules 在其他 Web 服务器(例如 Apache)中可用。 由于 Nginx 不支持此功能,因此您需要从源代码构建 Nginx 以添加模块。
拥有自己的自定义包有一个缺点——当有新版本时,你全权负责更新它。 在权衡使用 ngx_pagespeed 的利弊时要考虑到这一点。
先决条件
本指南是为 CentOS 7 编写的。 Ubuntu 14.04 版本 和 Debian 8 版本 也可用。
在学习本教程之前,请确保您完成以下先决条件:
- CentOS 7 Droplet
- 非 root sudo 用户(查看 Initial Server Setup with CentOS 7 了解详情。)
除非另有说明,本教程中所有需要 root 权限的命令都应以具有 sudo 权限的非 root 用户身份运行。
第 1 步 — 下载源代码及其依赖项
让我们首先确保我们拥有编译和测试 Nginx 所需的所有软件。 请运行命令:
sudo yum install wget curl unzip gcc-c++ pcre-devel zlib-devel
接下来,在你的主目录中创建一个文件夹来下载 Nginx 的源包:
mkdir ~/custom-nginx
切换到这个新创建的目录:
cd ~/custom-nginx
然后,从【X63X】官网【X84X】下载该目录下的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-nginxnginx-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/
使用以下命令运行配置源:
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
这将需要十分钟,具体取决于您的 Droplet 的资源。 之后,您可以使用以下命令安装软件:
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
为了确保 Nginx 每次都使用 Droplet 启动和停止,请使用以下命令将其添加到默认运行级别:
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
块并保存更改:
/etc/nginx/nginx.conf
## # 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 配置行添加到您可能拥有的 every 额外的 server
块文件中。
最后,重启 Nginx 服务器以使更改生效:
sudo service nginx restart
第 5 步 — 测试安装
要检查 ngx_pagespeed 模块是否已成功安装,请运行 Nginx 二进制文件,如下所示:
sudo /usr/sbin/nginx -V
如果安装成功,您应该会在其他自定义参数中看到 ngx_pagespeed 模块:
Outputnginx version: nginx/1.8.0 ... configure arguments: --add-module=/home/your_user/custom-nginx/nginx-1.8.0/src/http/modules/ngx_pagespeed/ ...
以上并不意味着 pagespeed 已启用并适用于您的网站。 要确认这一点,您可以使用 curl
,这是一个用于客户端 URL 传输的工具和库。 使用它检查 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 中尚不可用的任何其他模块。 此外,从源代码安装软件包的整个过程与您可能需要自定义的其他软件包类似。 只是不要忘记,当有新版本时,您必须自己维护和重新安装这些软件包。