nginx、apache与tomcat开启gzip压缩
最近在研究页面加载优化
对于页面元素较多或者页面加载量比较大的时候,就需要开启服务器的gzip压缩了,对于常规资源的压缩体积减少量非常可观。
服务器
nginx版本为1.8.0
apache版本为2.2.21
tomcat版本为7.0.35
apache配置:
$ nginx -V
列出的配置中添加:--with-http_gzip_static_module
重新编译安装
完成之后 修改nginx配置:
在http节点下添加:
gzip on; gzip_min_length 1k; gzip_buffers 16 64k; gzip_http_version 1.1; gzip_comp_level 6; gzip_types text/plain application/x-javascript text/css application/xml; gzip_vary on;
$ nginx -t
$ nginx -s reload
apache配置:
在http.conf中取消以下两行的注释:
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
mod_deflate.so 为gzip压缩功能模块
mod_headers.so 能够在返回请求时告知浏览器本页面使用了gzip压缩
然后添加以下配置:
<IfModule mod_deflate.c> SetOutputFilter DEFLATE #必须的,就像一个开关一样,告诉apache对传输到浏览器的内容进行压缩 SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary #设置不对gif|jpe?g|png格式的文件进行压缩 SetEnvIfNoCase Request_URI .(?:exe|t?gz|zip|bz2|sit|rar)$ no-gzip dont-vary #同上,不对exe|t?gz|zip|bz2|sit|rar格式的文件进行压缩 SetEnvIfNoCase Request_URI .(?:pdf|mov|avi|mp3|mp4|rm)$ no-gzip dont-vary #同上,不对pdf|mov|avi|mp3|mp4|rm格式的文件进行压缩 AddOutputFilterByType DEFLATE text/* #设置对文件是文本的内容进行压缩,例如text/html text/css text/plain等 AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript #这段代码你只需要了解application/javascript application/x-javascript这段就可以了,这段的意思是对javascript文件进行压缩 AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp #这段是告诉apache对php类型的文件进行压缩 BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.x 有一些问题,所以只压缩文件类型是text/html的 BrowserMatch ^Mozilla/4.0[678] no-gzip # Netscape 4.06-4.08 有更多的问题,所以不开启压缩 BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # IE浏览器会伪装成 Netscape ,但是事实上它没有问题 </IfModule>
对于多媒体及压缩文件等类型的资源,本身就是经过相应的压缩算法压缩过的,所以二次压缩对体积影响不大,而且由于资源体积相对较大,在压缩时会加重服务器的压力。
开启后在相应头中可以看到相应的变化:
对于大量文本页面的压缩效果非常明显(本机测试):
未开启压缩前:
开启压缩后:
由于压缩解压工作主要是由cpu来处理的,所以开启了gzip压缩后,对服务器cup的压力会增大,apache在响应浏览器请求时也会多执行一步,所以本机测试时虽然加载的数据量变少了,但加载时间却边长了。
tomcat配置:
找到<Connector/>标签
添加以下配置:
compression="on"
compressionMinSize="500"
noCompressionUserAgents="gozilla,traviata"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/png"
添加完成后的<Connector/>标签状态如下:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" compression="on" compressionMinSize="500" noCompressionUserAgents="gozilla,traviata" compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/png"/>
End.