日期:2014-05-16  浏览次数:20765 次

配置Apache,利用压缩网页来提升网站浏览速度及效果对比
???本文主要介绍如何通过配置Apache对页面进行压缩从而节省网站的带宽以及提升用户的访问速度。与PHP中ob_start("ob_gzhandler")功能一样!


??????? 网站的访问速度是由多个因素所共同决定的,这些因素例如应用程序的响应速度、网络带宽、服务器性能、与客户端之间的网络传输速度等等。其中最重要的一个因素是应用程序本身的响应速度,因此当你为网站性能所苦恼时,你第一个需要着手进行处理的便是尽可能的提升应用程序的执行速度,你可以使用缓存或者是优化代码的执行效率来提升应用程序的速度。

??????? 但是,本文并不是介绍如何来提升应用程序的执行效率,前面提到的只不过是为了防止您病急乱投医。在确保您的应用程序的性能已经达到足够好,同时服务器的性能也完全满足的情况下,不妨来试试网页压缩来进一步提升网页的浏览速度,而且非常重要的是,它完全不需要任何的成本,只不过是会让您的服务器CPU占用率稍微提升一两个百分点而已或者更少。

??????? 网页压缩是一项由 WEB 服务器和浏览器之间共同遵守的协议,也就是说 WEB 服务器和浏览器都必须支持该技术,所幸的是现在流行的浏览器都是支持的,包括 IE、FireFox、Opera 等;服务器有 Apache 和 IIS 等。双方的协商过程如下:

??????? 1、首先浏览器请求某个 URL 地址,并在请求的头 (head) 中设置属性 accept-encoding 值为 gzip, deflate,表明浏览器支持 gzip 和 deflate 这两种压缩方式(事实上 deflate 也是使用 gzip 压缩协议,下面我们会介绍二者之间的区别);
??????? 2、WEB 服务器接收到请求后判断浏览器是否支持压缩,如果支持就传送压缩后的响应内容,否则传送不经过压缩的内容;
??????? 3、浏览器获取响应内容后,判断内容是否被压缩,如果是则解压缩,然后显示响应页面的内容。

??????? 在实际的应用中我们发现压缩的比率往往在 3 到 10 倍,也就是本来 50k 大小的页面,采用压缩后实际传输的内容大小只有 5 至 15k???????? 大小,这可以大大节省服务器的网络带宽,同时如果应用程序的响应足够快时,网站的速度瓶颈就转到了网络的传输速度上,因此内容压缩后就可以大大的提升页面的浏览速度。

??????? 接下来我们介绍几种常用的环境下如何启用网页压缩功能。

?????? 配置方法

????纯 Tomcat 服务器

??????? 如果您的 WEB 应用程序是跑在 Tomcat 服务器下的,而且直接使用 Tomcat 所提供的 HTTP 服务,那建议你马上动手,因为实在是太简单了,你只需要在 server.xml 配置文件中给 HTTP Connector 增加一个 compression 的参数值为 on 并重启 Tomcat 服务器就立刻生效,配置如下:

??????? <Connector port="8080" protocol="HTTP/1.1"
?????????????????? maxThreads="150" connectionTimeout="20000"
?????????????????? redirectPort="8443" compression="on"/>

?

??????? Tomcat 采用的是 HTTP/1.1 的 GZIP 压缩协议,它会根据浏览器送过来的请求中的 accept-encoding 值是否包含 gzip 来判断浏览器是否支持 gzip 压缩协议,如果浏览器支持就启用 gzip 压缩,否则就不进行任何压缩处理。Tomcat 中还有另外一个参数 compressableMimeType,这个参数可以用来指定压缩哪种类型的内容,例如可以指定该配置值为:text/html,text/plain ,则只压缩 contentType 为 text/html 和 text/plain 的页面,不过您最好也将 css 和 javascript 文件也算在压缩的文件类型中,因为这两者的压缩效果也十分的明显。

??????? Apache 服务器

??????? 在 apache 1.3 版本,大家常用 mod_gzip 对输出内容进行压缩,现在主流的浏览器都支持 gzip 解压缩。在 apache2 下,这个模块换名为 mod_deflate,对应的模块文件名是 mod_deflate.so。mod_gzip 本文不做介绍,下面描述一下在 Apache 2 下如何启用并配置 mod_deflate 模块。默认安装的 Apache 不管是 Windows 还是 Linux/Unix,都是不启用该模块的, Linux/Unix 下甚至不带该模块,你需要手工编译这个模块。

??????? 下面我们分别介绍在 Windows 和 Linux 操作系统下如何启用并配置 mod_deflate 模块。

??????? 在 Windows 下采用安装程序安装的 Apache 服务器已经带有 deflate 所需要的模块 mod_deflate.so 和 mod_headers.so,我们只需要在 httpd.conf 配置文件中启用并进行相关的配置即可,配置如下:

??????? LoadModule deflate_module modules/mod_deflate.so
??????? LoadModule headers_module modules/mod_headers.so
??????? <Location />
??????????? # Insert filter
??????????? SetOutputFilter DEFLATE
??????????? # Netscape 4.x has some problems...
??????????? BrowserMatch ^Mozilla/4 gzip-only-text/html
??????????? # Netscape 4.06-4.08 have some more problems
??????????? BrowserMatch ^Mozilla/4\.0[678] no-gzip
??????????? # MSIE masquerades as Netscape, but it is fine
??????????? # BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
??????????? # NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48
??????????? # the above regex won't work. You can use the following
??????????? # workaround to get the desired effect:
??????????? BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html
??????????? # Don't compress images
??????????? SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
??????????? # M