Nginx 是一款用 C 语言编写的免费、开源和跨平台高性能 Web 服务器和反向代理软件。它同时还可以当做标准的IMAP/POP3 和 TCP/UDP 应用代理,最后,它还是一款非常优秀的负载均衡工具。

Nginx 作为 HTTP 服务器而出名,因为它的高性能和高可靠性,所以被大量网站所使用。

对于一个网站,网站的加载速度是网站用户体验众多指标中最重要的一项。如果网站使用 Nginx 作为服务器,那么可以使用 ngx_pagespeed 模块来达到提升性能的目的。

Ngx_pagespeed 是一个免费开源的 Nginx 模块,用于提升网站速度,缩短网页加载时间,它同时还可以非常显著的减少用户同网站交互时的等待时间。

Ngx_pagespeed 具有如下特性:

  • 支持 HTTPS 和 URL 控制
  • 图像优化:剥离元数据、动态伸缩和图像压缩
  • CSS 和 JavaScript 优化
  • 分离图像和 JavaScript 的加载
  • 支持 HTML 重写
  • 缓存生命周期扩展
  • 支持多服务器配置

本教程将详细演示在 RHEL/CentOS 7 系统中安装带有 Ngx_pagespeed 的 Nginx 全过程,并对其进行功能测试。

1] 安装编译工具

为了安装 Ngx_pagespeed 模块和 Nginx,需要重新编译 Nginx 的源代码,于是需要预先安装编译工具,以进行之后的安装步骤:

 # yum install wget gcc cmake unzip gcc-c++ pcre-devel zlib-devel
 OR
 # yum group install "Development Tools"

上面的两条命令可以任选一条,都会将编译所需的工具一次性安装到 CentOS 7 系统。

2] 编译安装带有 Ngx_pagespeed 模块的 Nginx

Ngx_pagespeed 模块由 Google 开发用户开发,可以先将 Ngx_pagespeed 源代码和 Nginx 的源代码下载后,在Nginx源代码编译时使用”–add-module”参数进行编译,最后生成可执行程序;现在开发人员提供了一个安装脚本,会自动下载编译安装所需的工具和依赖包,并根据用户输入对 Nginx 完成编译和生成可执行文件。自动化脚本如下:

 # bash <(curl -f -L -sS https://ngxpagespeed.com/install) --nginx-version latest

脚本执行过程不需要太多人工干预,只不过有一个步骤比较重要,要重点说明一下,就是脚本在对Nginx进行编译时,会要求用户输入额外的编译参数,如果不输入内容,只会使用”- -add-module”,这样编译出来的Nginx在使用时有很多功能不能实现,需要手动添加以下参数:

 --with-http_ssl_module --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid ${PS_NGX_EXTRA_FLAGS}

其中”${PS_NGX_EXTRA_FLAGS}”是脚本预先定义的一个变量,它会根据系统不同而略有区别。之后脚本会将Nginx的编译参数全部显示出来,如果类似于以下内容,就可以按”y”确认并按回车进行编译了:

 ./configure --add-module=/root/incubator-pagespeed-ngx-latest-stable --with-http_ssl_module --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid

示意图如下所示:

图.1 Ngx_pagespeed安装脚本输入编译参数

之后就会根据输入内容进行 Nginx 的编译和安装,就完成了带有 Ngx_pagespeed 模块的Nginx安装。

3] 添加Nginx服务

源代码方式安装 Nginx 虽然定制性较好,但是使用起来不如”yum”方式安装的方便,比如添加 Nginx 为系统服务就需要自行添加。不过步骤也不麻烦,首先添加两个链接:

 # ln -s /usr/local/nginx/conf/ /etc/nginx/
 # ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx

然后再新建一个服务文件”/lib/systemd/system/nginx.service”,并在文件中填入以下内容:

 [Unit]
 Description=The NGINX HTTP and reverse proxy server
 After=syslog.target network.target remote-fs.target nss-lookup.target
 [Service]
 Type=forking
 PIDFile=/var/run/nginx.pid
 ExecStartPre=/usr/sbin/nginx -t
 ExecStart=/usr/sbin/nginx
 ExecReload=/bin/kill -s HUP $MAINPID
 ExecStop=/bin/kill -s QUIT $MAINPID
 PrivateTmp=true
 [Install]
 WantedBy=multi-user.target

保存文件后就可以通过”systemctl”来管理Nginx服务了。示意图如下:

图.2 创建Nginx systemD文件配置Nginx服务

4] 配置Nginx网站启用ngx_pagespeed模块

启用ngx_pagespeed模块前需要先创建对应文件夹用于模块缓存:

 # mkdir -p /var/ngx_pagespeed_cache
 # chown -R nginx:nginx /var/ngx_pagespeed_cache

然后在需要启用 ngx_pagespeed 模块网站的配置文件”server”文件块中加入如下内容,便启用了ngx_pagespeed 加速功能:

 # 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" { }

5] ngx_pagespeed模块功能验证

对于ngx_pagespeed模块是否生效,单纯通过肉眼观察网页打开时间是不现实的,好在我们可以通过命令来检查它是否生效。最有效的工具当然是cURL工具,可以通过它来模拟访问网页,然后查看响应内容来确认ngx_pagespeed模块是否生效,例如curl本站时,会出现如图内容:

图.3 ngx_pagespeed模块验证

可以看到,当”curl”结果中出现有”X-Page-Speed”字样时,就表示 ngx_pagespeed 模块启用成功,好好享受这个模块带来的 Nginx 性能提升体验吧。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注