`

PageSpeed,为Nginx网站服务器提速

阅读更多

 网站加载速度越快,访客互动性、留住率和转换率就越高,这早已不是什么秘密。网站每延迟100毫秒,亚马逊的销售额就会减少1%;延迟增加500毫秒,这意味着谷歌的流量和收入就会减少20%。要是有一个办法可以为你的网站服务器提速,又不必升级到功能更强大的服务器,就没有理由不试一试这个办法。

我在本教程中将介绍如何优化Nginx网站服务器,以提升其性能。虽然Nginx网站服务器本身已俨然成为运行速度最快、可扩展性最佳的网站服务器之一,但是仍有众多方法可以调整优化其常规安装系统的性能。

举例说,有一个由谷歌开发的网站服务器模块,名为PageSpeed模块(https://developers.google.com/speed/pagespeed/module)。PageSpeed旨在缩短网页加载的时间,减少网站服务器的带宽使用量。最近,已发布了Nginx版本的PageSpeed模块(ngx_pagespeed)。作为一种有望为Nginx网站服务器提速的可行方法,我将演示如何在Nginx中启用并配置ngx_pagespeed模块。

PageSpeed的功能特性

PageSpeed模块可以使用数量众多的重写"过滤器",每个过滤器都可以选择性地开启/关闭,从而自动进行各种优化(比如,减小文档大小、减少HTTP请求数据、减少HTTP往返次数以及缩短DNS解析时间)。

下面是ngx_pagespeed支持的其中一些过滤器。想了解支持的全部过滤器,请参阅官方文档

  • Collapse Whitespace(压缩空白):通过把HTML网页中的多处连续空白换成一处空白,减少带宽使用量。
  • Canonicalize JavaScript Libraries(规范化转换JavaScript库):通过自动把流行的JavaScript库换成免费托管的JavaScript库(比如由谷歌托管),减少带宽使用量。
  • Combine CSS(合并CSS):通过把多个CSS文件合并成一个CSS文件,减少HTTP请求数量。
  • Combine JavaScript(合并JavaScript):通过把多个JavaScript文件合并成一个JavaScript文件,减少HTTP请求数量。
  • Elide Attributes(省略属性):通过删除由默认属性指定的标签,缩小文档大小。
  • Extend Cache(扩展缓存):通过优化网页资源的可缓存性,减少带宽使用量。
  • Flatten CSS Imports(精简CSS导入):通过删除CSS文件中的@import,减少HTTP请求往返次数。
  • Lazyload Images(延时加载图片):延时加载在客户端浏览器上看不见的图片。
  • Minify JavaScript(缩小JavaScript):通过缩小JavaScript,减少带宽使用量。
  • Optimize Images(优化图片):通过引入更多的内嵌图片、压缩图片,或者将GIF图片转换成PNG图片,优化图片分发。
  • Pre-Resolve DNS(预解析DNS):通过预解析DNS,缩短DNS解析时间。
  • Prioritize Critical CSS(优化加载关键CSS规则):重写CSS文件,以便首先加载渲染页面的CSS规则。

与Apache网站服务器不一样,Nginx模块无法在运行时动态加载,而是必须在编译时加载。截至本文截稿时,ngx_pagespeed模块并未内置在随主要Linux发行版(比如Fedora 19)发布的Nginx程序包中。因而,想使用Nginx中的PageSpeed,你需要利用源代码来构建Nginx。

借助ngx_pagespeed,构建和安装Nginx

安装用于构建nginx和ngx_pagespeed的必备要素。

在Debian、Ubuntu或Linux Mint上:

 

  1. $ sudo apt-get install build-essential zlib1g-dev libpcre3-dev 

在Fedora、CentOS或RHEL上:

 

  1. $ sudo yum install gcc-c++ pcre-devel zlib-devel make wget 

下载并安装ngx_pagespeed源代码,如下所示。ngx_pagespeed会被解压缩到/usr/local/nginx/modules/ngx_pagespeed-1.7.30.3-beta

  1. $ sudo mkdir -p /usr/local/nginx/modules 
  2. $ wget https://github.com/pagespeed/ngx_pagespeed/archive/v1.7.30.3-beta.tar.gz 
  3. $ sudo tar xvfvz v1.7.30.3-beta.tar.gz -C /usr/local/nginx/modules --no-same-owner 

下载预构建的PSOL(PageSpeed优化库,https://developers.google.com/speed/pagespeed/psol),并将它安装到ngx_pagespeed目录下:

  1. $ wget https://dl.google.com/dl/page-speed/psol/1.7.30.3.tar.gz 
  2. $ sudo tar xvfvz 1.7.30.3.tar.gz -C /usr/local/nginx/modules/ngx_pagespeed-1.7.30.3-beta --no-same-owner 
  3. $ sudo find /usr/local/nginx/modules/ngx_pagespeed-1.7.30.3-beta/ -type d -exec chmod +rx {} \; 
  4. $ sudo find /usr/local/nginx/modules/ngx_pagespeed-1.7.30.3-beta/ -type f -exec chmod +r {} \; 

从http://nginx.org/en/download.html,下载Nginx的最新稳定版。

  1. $ wget http://nginx.org/download/nginx-1.4.4.tar.gz 

最后,在ngx_pagespeed模块启用的情况下,编译Nginx,并安装它,如下所示。

  1. $ tar xvfvz nginx-1.4.4.tar.gz 
  2. $ cd nginx-1.4.4 
  3. $ ./configure --add-module=/usr/local/nginx/modules/ngx_pagespeed-1.7.30.3-beta --prefix=/usr/local/nginx --sbin-path=/usr/local/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/run/nginx.pid --lock-path=/run/lock/subsys/nginx --user=nginx --group=nginx 
  4. $ make 
  5. $ sudo make install 

你应该确认,ngx_pagespeed模块已添加到安装的Nginx系统上,如下所示。

  1. $ /usr/local/nginx/sbin/nginx -V 
  2. nginx version: nginx/1.4.4 
  3. built by gcc 4.8.2 20131212 (Red Hat 4.8.2-7) (GCC) 
  4. configure arguments: --add-module=/usr/local/nginx/modules/ngx_pagespeed-1.7.30.3-beta . . . . 

配置Nginx中的ngx_pagespeed模块

想启用并配置ngx_pagespeed,就要编辑Nginx配置的server部分。nginx.conf的下面这个示例表明了如何指定一个或多个PageSpeed过滤器。

  1. $ sudo vi /etc/nginx/nginx.conf 
  2. server { 
  3. # 侦听的端口 
  4. listen 80; 
  5. # 服务器名称 
  6. server_name xmodulo.com www.xmodulo.com; 
  7. # 记下根目录 
  8. root /usr/local/nginx/html; 
  9. # 访问日志 
  10. access_log /var/log/nginx/access.log main; 
  11. # 启用ngx_pagespeed 
  12. pagespeed on; 
  13. # 在此放置一个或多个pagespeed过滤器。 

说到指定PageSpeed过滤器,有两种不同的级别可供你选择:CoreFilters和PassThrough。除非有所指定,否则默认情况下使用CoreFilters。

对新手用户而言:使用CoreFilters

CoreFilters含有一系列PageSpeed过滤器,谷歌认为这些过滤器对大多数网站来说是安全的。如果启用CoreFilters,你就自动启用了一系列"安全"规则。所以,推荐新手用户采用这种方法。如果你愿意,也可以禁用CoreFilters中的某个或某些过滤器,或者选择性地启用额外的过滤器。下面这个例子表明了使用CoreFilters的ngx_pagespeed配置。

  1. server { 
  2. # 侦听的端口 
  3. listen 80; 
  4. # 服务器名称 
  5. server_name xmodulo.com www.xmodulo.com; 
  6. # 记下根目录 
  7. root /usr/local/nginx/html; 
  8. # 访问日志 
  9. access_log /var/log/nginx/access.log main; 
  10. # 启用ngx_pagespeed 
  11. pagespeed on; 
  12. pagespeed FileCachePath /var/ngx_pagespeed_cache; 
  13. # 启用CoreFilters 
  14. pagespeed RewriteLevel CoreFilters; 
  15. # 禁用CoreFilters中的某些过滤器 
  16. pagespeed DisableFilters rewrite_images; 
  17. # 选择性地启用额外的过滤器 
  18. pagespeed EnableFilters collapse_whitespace; 
  19. pagespeed EnableFilters lazyload_images; 
  20. pagespeed EnableFilters insert_dns_prefetch; 

想了解CoreFilters中的全部过滤器,请参阅官方文档

对高级用户而言:使用PassThrough

如果是高级用户,你可以使用PageThrough级别,你可以手动启用个别过滤器。

  1. server { 
  2. # 侦听的端口 
  3. listen 80; 
  4. # 服务器名称 
  5. server_name xmodulo.com www.xmodulo.com; 
  6. # 记下根目录 
  7. root /usr/local/nginx/html; 
  8. # 访问日志 
  9. access_log /var/log/nginx/access.log main; 
  10. # 启用ngx_pagespeed 
  11. pagespeed on; 
  12. pagespeed FileCachePath /var/ngx_pagespeed_cache; 
  13. # 禁用CoreFilters 
  14. pagespeed RewriteLevel PassThrough; 
  15. # 启用压缩空白过滤器 
  16. pagespeed EnableFilters collapse_whitespace; 
  17. # 启用JavaScript库卸载 
  18. pagespeed EnableFilters canonicalize_javascript_libraries; 
  19. # 把多个CSS文件合并成一个CSS文件 
  20. pagespeed EnableFilters combine_css; 
  21. # 把多个JavaScript文件合并成一个JavaScript文件 
  22. pagespeed EnableFilters combine_javascript; 
  23. # 删除带默认属性的标签 
  24. pagespeed EnableFilters elide_attributes; 
  25. # 改善资源的可缓存性 
  26. pagespeed EnableFilters extend_cache; 
  27. # 更换被导入文件的@import,精简CSS文件 
  28. pagespeed EnableFilters flatten_css_imports; 
  29. pagespeed CssFlattenMaxBytes 5120; 
  30. # 延时加载客户端看不见的图片 
  31. pagespeed EnableFilters lazyload_images; 
  32. # 启用JavaScript缩小机制 
  33. pagespeed EnableFilters rewrite_javascript; 
  34. # 启用图片优化机制 
  35. pagespeed EnableFilters rewrite_images; 
  36. # 预解析DNS查询 
  37. pagespeed EnableFilters insert_dns_prefetch; 
  38. # 重写CSS,首先加载渲染页面的CSS规则 
  39. pagespeed EnableFilters prioritize_critical_css; 

另外的配置步骤:

创建将由Nginx写入的一个文件缓存目录。

  1. $ sudo mkdir /var/ngx_pagespeed_cache 
  2. $ sudo chown nginx:nginx /var/ngx_pagespeed_cache 

为了方便起见,为Nginx创建一个初始化脚本。

  1. $ wget https://github.com/MovLib/www/raw/master/bin/init-nginx.sh 
  2. $ sudo mv init-nginx.sh /etc/init.d/nginx 
  3. $ sudo chmod 0755 /etc/init.d/nginx 

最后,启动Nginx。

 

  1. $ sudo /etc/init.d/nginx start 

注意:除了ngx_pagespeed外,你可能还需要定义额外的Nginx模块(比如HTTPS/SSL支持等),具体视需求而定。这种情况下,你需要在Nginx编译这个环节来添加这些模块。请参阅这篇教程(http://xmodulo.com/2014/01/compile-install-nginx-web-server.html),了解如何启用额外的Nginx模块。

原文链接:http://xmodulo.com/2014/01/speed-nginx-web-server-pagespeed.html

分享到:
评论

相关推荐

    搭建nginx点播服务器

    搭建Nginx点播服务器是将Nginx配置为一种能高效处理静态媒体文件,如音频和视频,供用户按需访问的服务器。Nginx因其高性能、高并发能力、内容分发、缓存功能、安全性以及负载均衡能力,成为搭建点播服务器的理想...

    图书:Nginx HTTP服务器

    12. **模块扩展**:Nginx支持丰富的第三方模块,如ModSecurity用于Web应用防火墙,ngx_pagespeed优化前端性能等。 13. **故障转移与健康检查**:学习如何配置Nginx进行后端服务器的健康检查和故障自动切换。 14. *...

    nginx rtmp转发服务器

    【Nginx RTMP 转发服务器详解】 Nginx RTMP服务器是一个基于Nginx的开源扩展,专门设计用于处理实时流媒体协议(RTMP)。它为内容发布者和消费者提供了一个高效、低延迟的平台,适用于直播、视频点播等多种应用场景...

    nginx rtmp 服务器编译好

    总之,Nginx RTMP服务器为Windows用户提供了一个稳定且高效的直播平台,无论是对于个人直播还是企业级应用,都是一个值得考虑的选择。通过编译或直接使用预编译版本,你可以轻松地搭建起自己的流媒体服务,实现内容...

    使用Tomcat或Nginx搭建视频服务器

    在描述中,提到了在Ubuntu系统上使用Nginx进行视频服务器的搭建,并且使用ffmpeg来处理视频文件为HLS协议的分片以支持视频点播。HLS(HTTP Live Streaming)是苹果公司开发的一种视频流媒体传输协议,使得视频可以...

    ubunt下安装nginx web服务器

    Ubuntu 下安装 Nginx Web 服务器 Nginx 是一个流行的开源 Web 服务器软件,可以运行在多种操作系统上,包括 Ubuntu。本文将手把手指导您在 Ubuntu 下安装 Nginx Web 服务器,包括安装前提、Nginx 源码下载、目录...

    nginx图片服务器配置和https配置

    nginx图片服务器配置和https配置

    nginx搭建文件服务器上传文件获取文件

    ### Nginx 搭建文件服务器:上传与获取文件 在互联网技术中,Nginx 被广泛用于构建高性能、稳定的Web服务器环境。本文将详细介绍如何利用 OpenResty + Nginx + Lua 实现一个文件服务器,该服务器支持文件上传与获取...

    nginx搭建流媒体服务器(flv,mp4视频播放网站).zip

    首先,我们来看【标题】"nginx搭建流媒体服务器(flv,mp4视频播放网站).zip",这表明我们将使用Nginx搭建一个能够播放FLV和MP4视频的网站。FLV是Adobe Flash Player支持的一种流式视频格式,而MP4是一种广泛应用的、...

    nginx-1.0.4 服务器软件下载

    nginx-1.0.4 nginx nginx最新版 全能服务器 代理服务器 http://www.bywei.cn/blog 程序员百味 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 ...

    nginx服务器及使用

    通过提供的资源,用户可以在Windows上安装Nginx并将其配置为开机自启动的服务,确保网站和应用程序的连续运行。同时,通过深入理解配置文件和相关文档,用户可以对Nginx进行更精细的定制,以满足特定的业务需求。

    Nginx web服务器

    Nginx 高性能web服务器详解、包括安装、配置、Linux内核优化、Nginx的相关优化等

    nginx Web服务器代码

    **Nginx Web服务器代码详解** Nginx是一款高性能、轻量级的Web服务器和反向代理服务器,因其高效的并发处理能力和低内存占用而受到广泛关注。它的设计目标是实现高并发、低延迟以及稳定性,因此在大型网站和互联网...

    rtmp服务器 nginx 1.7.11.3 Gryphon

    Nginx RTMP服务器的配置文件通常为`nginx.conf`,在这个文件中,用户可以定义RTMP服务器的基本设置,如监听端口、流媒体路径、转码规则、 HLS切片参数等。对于初学者,可以保持默认配置,而高级用户可以根据需求进行...

    nginx 1.9.7服务器windows版

    - **反向代理**:Nginx可以通过反向代理将用户的请求转发到后端服务器,实现负载均衡,提高网站性能和可用性。 - **静态资源处理**:对于HTML、图片、CSS和JavaScript等静态文件,Nginx能快速高效地进行处理和缓存。...

    nginx 隐藏版本号与WEB服务器信息的解决方法

    在网络安全日益重要的今天,隐藏服务器信息,特别是像Nginx这样的Web服务器的版本号,是一项基本的安全措施。这是因为,公开的版本信息可能会暴露服务器的弱点,让潜在的攻击者了解其可能存在的漏洞,从而有针对性地...

    Nginx安装配置PageSpeed模块实现网站加速.docx

    PageSpeed是Google开发的一个开源项目,它是一个Nginx模块,名为ngx_pagespeed,旨在通过自动应用一系列Web性能最佳实践来优化网页内容,从而提升网站的加载速度和用户体验。 **PageSpeed模块的主要功能** 1. **...

Global site tag (gtag.js) - Google Analytics