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
此时,您已准备好配置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
之前的安装过程负责一些简单的任务,例如创建必要的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
你现在安装了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
要检查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》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。