适合 gzip 压缩的情况

压缩的好处都知道,传输资源体积减小,传输时间成本降低,消耗的流量降低,一定程度上提升网站用户体验。

但不是所有情况下都适合开启 gzip 压缩的,比如前端的资源如 css,js 之类都被 webpack 打包过了,单个文件已经足够小的情况下,或者都是些压缩率较低的文件(图片、音频、视频、pdf等等)。

这些情况就不合适或者没有必要,因为开启 gzip 压缩本身也是要消耗服务器 cpu 资源的。

如果只是测试 gzip 压缩这一特性,那就无所谓了。

Nginx 设置 gzip 压缩

gzip on;
gzip_buffers 32 4K;
gzip_comp_level 6;
gzip_min_length 100;
gzip_types application/javascript text/css text/xml;
gzip_disable "MSIE [1-6]\.";
gzip_vary on;

放在 server 内,server_name 下面就好。

Apache 设置 gzip 压缩

首先要打开 mod_deflate.so 压缩扩展,编辑 httpd.conf,去除注释符号 #:

LoadModule deflate_module modules/mod_deflate.so

然后在 httpd.conf 末尾添加一下压缩模块设置(全局设置):

<IfModule deflate_module>
    # 告诉 apache 对传输到浏览器的内容进行压缩
    SetOutputFilter DEFLATE
    # 压缩等级 9 最低是1,不建议按最大级别进行压缩,压缩率过高会占更多CPU资源
    DeflateCompressionLevel 6
    # 设置不对后缀gif,jpg,jpeg,png的图片文件进行压缩
    SetEnvIfNoCase Request_URI .(?:gif|jpe?g|png)$ no-gzip dont-vary
    # 压缩类型 html、xml、php、css、js 面的文件MIME类型可以根据自己情况添加
    AddOutputFilterByType DEFLATE text/html text/plain text/xml application/x-javascript application/x-httpd-php
    AddOutputFilter DEFLATE js css
</IfModule>

测试过,linux 下 Apache 2.2.27 下,将配置放在 httpd.conf(Apache 配置文件)末尾,gzip 生效;放在项目目录下的 .htaccess 中,直接报错 500 Internal Server Error

本地 win7 XAMPP Apache 2.4.38 下,将配置放在 httpd.conf(Apache 配置文件)末尾,Apache 重启会失败,在只保留 SetOutputFilter DEFLATEDeflateCompressionLevel 6 的情况下可以正常启动。将其放到 <VirtualHost *:80> 中也是如此。而线上版本的 xampp 可以正常启动,知道原因的欢迎留言指导。