修改Apache配置文件开启gzip压缩传输

时间:2022-09-17 00:26:57

最近无事研究一些Web的优化,用工具page speed检测网站时发现还没有开启gzip压缩,于是上网找来资料实验一下;在apache2.0以上(包括apache2.0)的版中gzip压缩使用的是mod_deflate模块,下面是具体配置步骤

第1步

<span class="sh_usertype">LoadModule</span><span class="sh_normal"> </span><span class="sh_usertype">deflate_module</span><span class="sh_normal"> </span>modules<span class="sh_symbol">/</span>mod_deflate<span class="sh_symbol">.</span>so
<span class="sh_usertype">LoadModule</span><span class="sh_normal"> </span><span class="sh_usertype">headers_module</span><span class="sh_normal"> </span>modules<span class="sh_symbol">/</span>mod_headers<span class="sh_symbol">.</span>so

  打开httpd.conf后,先将上面两行配置前面的#号去掉,这样apache就会启用这两个模块,其中mod_deflate是压缩模块,就是对要传输到客户端的代码进行gzip压缩;mod_headers模块的作用是告诉浏览器页面使用了gzip压缩,如果不开启mod_headers那么浏览器就会对gzip压缩过的页面进行下载,而无法正常显示。

第2步

  在httpd.conf中加入以下代码,可以加到任何空白地方,不了解apache的朋友,如果担心加错地方,就放到http.conf文件的最后一行,如果是虚拟服务器可以写.htaccess文件里面,然后放在项目下即可。

<span class="sh_symbol"><</span><span class="sh_usertype">IfModule</span><span class="sh_normal"> </span>mod_deflate<span class="sh_symbol">.</span>c<span class="sh_symbol">></span>
    <span class="sh_usertype">SetOutputFilter</span><span class="sh_normal"> </span>DEFLATE    #必须的,就像一个开关一样,告诉apache对传输到浏览器的内容进行压缩

    <span class="sh_usertype">SetEnvIfNoCase</span><span class="sh_normal"> </span>Request_URI <span class="sh_symbol">.(?:</span>gif<span class="sh_symbol">|</span>jpe<span class="sh_symbol">?</span>g<span class="sh_symbol">|</span>png<span class="sh_symbol">)</span>$ no<span class="sh_symbol">-</span><span class="sh_usertype">gzip</span><span class="sh_normal"> </span>dont<span class="sh_symbol">-</span>vary #设置不对后缀gif,jpg,jpeg,png的图片文件进行压缩
    <span class="sh_usertype">SetEnvIfNoCase</span><span class="sh_normal"> </span>Request_URI <span class="sh_symbol">.(?:</span>exe<span class="sh_symbol">|</span>t<span class="sh_symbol">?</span>gz<span class="sh_symbol">|</span>zip<span class="sh_symbol">|</span>bz2<span class="sh_symbol">|</span>sit<span class="sh_symbol">|</span>rar<span class="sh_symbol">)</span>$ no<span class="sh_symbol">-</span><span class="sh_usertype">gzip</span><span class="sh_normal"> </span>dont<span class="sh_symbol">-</span>vary #同上,就是设置不对exe,tgz,gz。。。的文件进行压缩
    <span class="sh_usertype">SetEnvIfNoCase</span><span class="sh_normal"> </span>Request_URI <span class="sh_symbol">.(?:</span>pdf<span class="sh_symbol">|</span>mov<span class="sh_symbol">|</span>avi<span class="sh_symbol">|</span>mp3<span class="sh_symbol">|</span>mp4<span class="sh_symbol">|</span>rm<span class="sh_symbol">)</span>$ no<span class="sh_symbol">-</span><span class="sh_usertype">gzip</span><span class="sh_normal"> </span>dont<span class="sh_symbol">-</span>vary

    AddOutputFilterByType <span class="sh_usertype">DEFLATE</span><span class="sh_normal"> </span>text<span class="sh_comment" style="color: rgb(255, 0, 0);">/* #设置对文件是文本的内容进行压缩,例如text/html  text/css  text/plain等</span>
<span class="sh_comment" style="color: rgb(255, 0, 0);">    AddOutputFilterByType DEFLATE application/ms* application/vnd* application/postscript application/javascript application/x-javascript #这段代码你只需要了解application/javascript application/x-javascript这段就可以了,这段的意思是对javascript文件进行压缩</span>
<span class="sh_comment" style="color: rgb(255, 0, 0);">    AddOutputFilterByType DEFLATE application/x-httpd-php application/x-httpd-fastphp #这段是告诉apache对php类型的文件进行压缩</span>

<span class="sh_comment" style="color: rgb(255, 0, 0);">    BrowserMatch ^Mozilla/4 gzip-only-text/html # Netscape 4.x 有一些问题,所以只压缩文件类型是text/html的</span>
<span class="sh_comment" style="color: rgb(255, 0, 0);">    BrowserMatch ^Mozilla/4.0[678] no-gzip # Netscape 4.06-4.08 有更多的问题,所以不开启压缩</span>
<span class="sh_comment" style="color: rgb(255, 0, 0);">    BrowserMatch \bMSIE !no-gzip !gzip-only-text/html # IE浏览器会伪装成 Netscape ,但是事实上它没有问题</span>
<span class="sh_comment" style="color: rgb(255, 0, 0);"></IfModule></span>

  本配置到这里apache中的gzip压缩就配置完成,重启apache后,新的配置就会生效。最后再用工具检查一下,果然分数提高了很多~呵呵。 不过开启gzip功能需要额外CPU资源开销。