当前位置: 首页 > 科技观察

如何使用PageSpeed为Nginx网站服务器提速?

时间:2023-03-16 18:53:52 科技观察

【外国新闻头条,2014年2月11日】众所周知,您的网站加载速度越快,访问者的互动率、保留率和转化率就越高。网站每延迟100毫秒,亚马逊就会损失1%的销售额;每延迟500毫秒,Google的流量和收入就会增加20%。如果有一种方法可以加速您的Web服务器而无需升级到更强大的服务器,那么没有理由不尝试一下。在本教程中,我将解释如何优化NginxWeb服务器以提高其性能。虽然Nginx网络服务器本身已经成为最快和最具扩展性的网络服务器之一,但仍然有很多方法可以调整和优化其常规安装系统的性能。例如,有一个由Google开发的Web服务器模块,称为PageSpeed模块(https://developers.google.com/speed/pagespeed/module)。PageSpeed旨在缩短网页的加载时间,减少网络服务器的带宽使用。最近发布了一个Nginx版本的PageSpeed模块(ngx_pagespeed)。作为加速NginxWeb服务器的一种可能方法,我将演示如何在Nginx中启用和配置ngx_pagespeed模块。PageSpeed的功能特点PageSpeed模块可以使用大量重写的“过滤器”,每个过滤器都可以有选择地打开/关闭以自动执行各种优化(例如减少文档大小、减少HTTP请求数据、减少HTTP往返次数并缩短DNS解析时间)。以下是ngx_pagespeed支持的一些过滤器。对于所有支持的过滤器,请参考官方文档。CollapseWhitespace:通过用单个空白替换HTML页面中的多个连续空白来减少带宽使用。规范化JavaScript库:通过使用免费托管的JavaScript库(例如由Google托管的库)自动替换流行的JavaScript库来减少带宽使用。合并CSS:通过将多个CSS文件合并为一个CSS文件来减少HTTP请求的数量。合并JavaScript:通过将多个JavaScript文件合并为一个JavaScript文件来减少HTTP请求的数量。ElideAttributes:通过删除默认属性指定的标签来减小文档大小。扩展缓存:通过优化Web资源的可缓存性来减少带宽使用。FlattenCSSImports:通过删除CSS文件中的@import来减少HTTP请求往返次数。LazyloadImages:延迟加载在客户端浏览器上不可见的图像。缩小JavaScript:通过缩小JavaScript来减少带宽使用。优化图像:通过引入更多嵌入图像、压缩图像或将GIF图像转换为PNG图像来优化图像分布。Pre-ResolveDNS(预解析DNS):通过预解析DNS缩短DNS解析时间。优先关键CSS:重写CSS文件,以便首先加载呈现页面的CSS规则。与ApacheWeb服务器不同,Nginx模块不能在运行时动态加载,而必须在编译时加载。在撰写本文时,ngx_pagespeed模块并未内置在Fedora19等主要Linux发行版随附的Nginx包中。因此,要在Nginx中使用PageSpeed,需要从源代码构建Nginx。使用ngx_pagespeed,构建和安装Nginx会安装构建nginx和ngx_pagespeed的先决条件。在Debian、Ubuntu或LinuxMint上:$sudoapt-getinstallbuild-essentialzlib1g-devlibpcre3-dev在Fedora、CentOS或RHEL上:$sudoyuinstallgcc-c++pcre-develzlib-develmakewget下载并安装ngx_pagespeed源代码,如下所示。ngx_pagespeed会解压到/usr/local/nginx/modules/ngx_pagespeed-1.7.30.3-beta$sudomkdir-p/usr/local/nginx/modules$wgethttps://github.com/pagespeed/ngx_pagespeed/archive/v1。7.30.3-beta.tar.gz$sudotarxvfvzv1.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目录:$wgethttps://dl.google.com/dl/page-speed/psol/1.7.30.3.tar。gz$sudotarxvfvz1.7.30.3.tar.gz-C/usr/local/nginx/modules/ngx_pagespeed-1.7.30.3-beta--no-same-owner$sudofind/usr/local/nginx/modules/ngx_pagespeed-1.7从http://nginx.org/en/download.html下载最新的稳定版Nginx。$wgethttp://nginx.org/download/nginx-1.4.4.tar.gz***,启用ngx_pagespeed模块编译Nginx,安装如下图。$tarxvfvznginx-1.4.4.tar.gz$cdnginx-1.4.4$./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$make$sudomakeinstall您应该确认ngx_pagespeed模块已经添加到已安装的Nginx系统中,如下所示。$/usr/local/nginx/sbin/nginx-Vnginxversion:nginx/1.4.4builtbygcc4.8.220131212(RedHat4.8.2-7)(GCC)configurearguments:--add-module=/usr/local/nginx/modules/ngx_pagespeed-1.7.30.3-beta....在Nginx中配置ngx_pagespeed模块要启用和配置ngx_pagespeed,您必须编辑Nginx配置的服务器部分。以下nginx.conf示例显示了如何指定一个或多个PageSpeed过滤器。$sudovi/etc/nginx/nginx.confserver{#监听端口listen80;#服务器名称server_namexmodulo.comwww.xmodulo.com;#记下根目录root/usr/local/nginx/html;#访问日志access_log/var/log/nginx/access.logmain;#Enablengx_pagespeedpagespeedon;#Placeoneormorepagespeedfiltershere.在指定PageSpeed过滤器时,您可以选择两种不同的级别:CoreFilters和PassThrough。除非另有说明,否则默认使用CoreFilters。对于新手用户:使用CoreFiltersCoreFilters包含一组Google认为对大多数网站安全的PageSpeed过滤器。如果启用CoreFilters,则会自动启用一组“安全”规则。因此,这种方法推荐给新手用户。如果愿意,您还可以禁用CoreFilters中的一个或多个过滤器,或者选择性地启用其他过滤器。以下示例显示了使用CoreFilters的ngx_pagespeed配置。server{#监听端口listen80;#服务器名server_namexmodulo.comwww.xmodulo.com;#记下根目录root/usr/local/nginx/html;#访问日志access_log/var/log/nginx/access.logmain;#启用ngx_pagespeedpagespeedon;pagespeedFileCachePath/var/ngx_pagespeed_cache;#启用CoreFilterspagespeedRewriteLevelCoreFilters;#禁用CoreFilters中的某些过滤器pagespeedDisableFiltersrewrite_images;#选择性地启用额外的过滤器pagespeedEnableFilterscollapse_whitespace;pagespeedEnableFilterslazyload_images;pagespeedEnableFiltersinsert_dns_prefetch;}想了解CoreFilters中的全部过滤器,请参考官方文档。对于高级用户:使用PassThrough如果您是高级用户,您可以使用PageThrough级别,您可以手动启用个别过滤器。server{#Listeningportlisten80;#Servernameserver_namexmodulo.comwww.xmodulo.com;#Writedowntherootdirectoryroot/usr/local/nginx/html;#Accesslogaccess_log/var/log/nginx/access.logmain;#启用ngx_pagespeedpagespeedon;pagespeedFileCachePath/var/ngx_pagespeed_cache;#禁用CoreFilterspagespeedRewriteLevelPassThrough;#启用压缩空白过滤器pagespeedEnableFilterscollapse_whitespace;#启用JavaScript库卸载pagespeedEnableFilterscanonicalize_javascript_libraries;#把多个CSS文件合并成一个CSS文件pagespeedEnableFilterscombine_css;#把多个JavaScript文件合并成一个JavaScript文件pagespeedEnableFilterscombine_javascript;#删除带默认属性的标签pagespeedEnableFilterselide_attributes;#改善资源的可缓存性pagespeedEnableFiltersextend_cache;#更换被导入文件的@import,精简CSS文件pagespeedEnableFiltersflatten_css_imports;pagespeedCssFlattenMaxBytes5120;#延时加载客户端看不见的图片pagespeedEnableFilterslazyload_images;#EnableJavaScriptnarrowingmechanismpagespeedEnableFiltersrewrite_javascript;#EnableimageoptimizationmechanismpagespeedEnableFiltersrewrite_images;#Pre-analyzeDNSquerypagespeedEnableFiltersinsert_dns_prefetch;#RewriteCSS,firstloadtheCSSrulesforrenderingpagespagespeedEnableFiltersprioritize_critical_css;}附加配置步骤:创建一个Nginx将写入的文件缓存目录$sudomkdir/var/ngx_pagespeed_cache$sudochownnginx:nginx/var/ngx_pagespeed_cache为了方便起见,为Nginx创建一个初始化脚本。$wgethttps://github.com/MovLib/www/raw/master/bin/init-nginx.sh$sudomvinit-nginx.sh/etc/init.d/nginx$sudochmod0755/etc/init.d/nginx***,启动Nginx。$sudo/etc/init.d/nginxstart注意:除了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