跳到主要内容
  1. Skills/
  2. 系统运维、优化/

如何开启nginx gzip压缩

··字数 1193·3 分钟
nginx gzip 压缩 流量优化 有悟方法

nginx 压缩功能,可以减少文件的网络传输时间、同时也节省了所需要的带宽。比如高压缩比的html、js、json、css等,有时可以高达70%~90%,优化效果明显。

环境检查 #

首先,检查 nginx 的编译参数:

> nginx -V
...
--with-http_gunzip_module --with-http_gzip_static_module
...

上面的 with-http_gunzip_modulewith-http_gzip_static_module 表示系统所安装的 nginx 版本支持通过 gzip 来压缩文件。

压缩功能非常普通,nginx 也比较早支持 gzip 压缩,所以一般安装的版本都包含了,如果你访问网页得到的响应不支持,那么应该检查服务器的版本与编译参数。

开启压缩 #

默认情况下,nginx 只对 text/html 类型的文件请求 开启压缩。

nginx 配置 #

配置文件位置:/etc/nginx/nginx.conf

http {
    ##
    # Gzip Settings
    ##

    gzip on;

    # gzip_vary on;
    # gzip_proxied any;
    # gzip_comp_level 6;
    # gzip_buffers 16 8k;
    # gzip_http_version 1.1;
    # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
}

那么如何配置使 nginx 支持 json/js/css 类型文件的压缩呢?

直接去掉上面 gzip_types#号后保存,重启或重载配置文件后全站将启用压缩功能。

其它级别的配置 #

nginx压缩 可以配置在 http、server、location 三种级别下。

上面的示例中的压缩功能覆盖整个 nginx

如果只是想针对某个站点、或者路径,那么到相应的配置中添加 gzip_types

下面为本站配置,配置文件位置:/etc/nginx/site-available/xxx.conf

server {
    ...
    # compress

    gzip  on;
    gzip_min_length  1k;
    gzip_buffers     4 16k;
    gzip_http_version 1.1;
    gzip_comp_level 2;
    gzip_types
        # text/html is always compressed by HttpGzipModule
        text/css
        text/javascript
        text/xml
        text/plain
        text/x-component
        application/javascript
        application/json
        application/xml
        application/rss+xml
        font/truetype
        font/opentype
        application/vnd.ms-fontobject
        image/svg+xml;

    gzip_static on;
    gzip_proxied expired no-cache no-store private auth;
    gzip_disable "MSIE [1-6]\.";
    gzip_vary on;
    ...

与上一节 在http模块中配置类似,同样是设置 gzip ongzip_types,以及其它相关参数。根据实际需求来配置,建议别写上多余的、不清楚会产生什么作用的参数,以免产生奇怪的现象。一般 gzip ongzip_types这两个就够,或者参考官方文档中的参数说明、逐个设置。

gzip ongzip_types外,还有几个比较常用修改的项:

  • gzip_min_length: 最小值,即当文件大小小于该数时,不压缩。本身很小的文件压缩没什么意义
  • gzip_comp_level: 压缩级别,1~9,数字越高,压缩比越大,文件越小,同时开销也越大。如果2~4已经压缩比很多,就没必要设置到9。自己可以在电脑上拿个7z测试一下。而且还有更好压缩效果的算法。

需要注意的问题 #

优化是对资源分配的平衡,压缩需要cpu来参与计算,所以开启压缩是需要与cpu开销问题一起来综合考虑。不能一味追求高压缩比。比如当文件很大时,压缩文件会带来明显延迟,系统CPU也会产生瞬间冲上去。

对一般页面文件、js、json、css等,开启压缩,会给网站带来明显的优化效果。 而针对大文件的情况,要么事先手工压缩好,要通过其它方式提供服务,不建议在nginx中开启对大文件的压缩。

其它压缩算法 #

当然,除了 gzip 压缩之外,还可以支持 Brotli 压缩算法(这个算法是google工程师开源的)。 Brotli 压缩算法不随官方版本分发,需要自行编译才能使用。

后面找时间再分享 nginx 安装 Brotli 压缩模块的过程,或者某度某歌自己搜,资料还挺多的。