目 录CONTENT

文章目录

Nginx静态资源压缩

简中仙
2022-09-07 / 0 评论 / 0 点赞 / 74 阅读 / 0 字 / 正在检测是否收录...
温馨提示:
本文最后更新于2023-10-07,若内容或图片失效,请留言反馈。 本文如有错误或者侵权的地方,欢迎您批评指正!

nginx支持对资源压缩传输,经过压缩后的页面大小可以为原本的30%甚至更小,用户浏览体验会快很多。

模块:ngx_http_gzip_module

为提高用户获取响应数据的速度,Nginx服务器可以将响应数据进行gzip压缩,在减小响应数据的大小后再发送给用户端浏览器,相对于使用户浏览Web页面,上述方式显示速度更快。要想启用响应数据gzip压缩功能,需要用户浏览器也支持gzip解压功能,目前大多数浏览器都支持gzip压缩数据的显示。Nginx服务器接收客户端浏览器发送的请求后,通过请求头中的属性字段Accept-Encoding判断浏览器是否支持gzip压缩,对支持gzip压缩的浏览器将发送gzip压缩的响应数据。

模块:ngx_http_gunzip_module

当客户端浏览器不支持gzip压缩时,该模块将压缩的数据解压后发送给客户端。对支持gzip压缩的浏览器不做处理。

模块:ngx_http_gzip_static_module

通常gzip压缩指令都是读取未压缩的文本,在进行动态压缩后把响应数据发送给客户端,该模块可以使Nginx把gzip压缩过的以.gz为后缀的文件或已压缩的响应数据直接发送给客户端。

配置样例如下:

    gzip_static always;                  # 始终发送静态的gzip压缩数据 
    gunzip on;                           # 若客户端浏览器不支持gzip压缩数据,则解压后发送 
    gunzip_buffers 16 8k;                # 解压缓冲区大小为128KB 
    gzip_http_version 1.1;    #识别http协议的版本
    gzip_proxied  any;      #做为反向代理时启用
    gzip_proxied expired no-cache no-store private auth;    # 当被代理的服务器符合条件时, 对响应数据启用gzip压缩 
    gzip on;                             # 启用动态gzip压缩功能 
    gzip_min_length  1k;                 # 响应数据超过1KB时启用gzip压缩 
    gzip_buffers     4 16k;              # 动态压缩的缓冲区大小是64KB 
    gzip_comp_level 3;                   # 压缩级别为3 
    gzip_types  text/xml application/xml application/atom+xml application/rss+xml application/xhtml+xml image/svg+xml text/javascript application/javascript application/x-javascript text/x-json application/json application/x-web-app-manifest+json text/css text/plain text/x-component font/opentype application/x-font-ttf application/vnd.ms-fontobject image/x-icon; # 对指定的MIME类型数据启用动态压缩 
    gzip_vary on;                        # 向前端代理或缓存服务器发送添加“Vary: Accept- Encoding”的响应数据

第三方模块:ngx_brotli

注:这种压缩方式仅支持HTTPS
Brotli是开源的一种新型压缩算法,Brotli压缩比智能压缩性能更好。开启Brotli压缩功能后,会对资源进行智能压缩后返回,缩小传输文件大小,提升文件传输效率,减少带宽消耗。

官网地址:https://github.com/google/ngx_brotli
算法地址:https://github.com/google/brotli

动态加载

wget https://github.com/google/brotli/archive/refs/tags/v1.0.9.tar.gz
wget https://github.com/google/ngx_brotli/archive/refs/tags/v1.0.0rc.tar.gz
tar zxf v1.0.0rc.tar.gz
tar zxf v1.0.9.tar.gz 
mv brotli-1.0.9/* /root/ngx_brotli-1.0.0rc/deps/brotli/
./configure --with-compat --add-dynamic-module=/root/ngx_brotli-1.0.0rc

ngx_http_brotli_filter_module.so ngx_http_brotli_static_module.so拷贝到/usr/local/nginx/modules/
复制nginx主程序
配置文件中添加

load_module "/usr/local/nginx/modules/ngx_http_brotli_filter_module.so";
load_module "/usr/local/nginx/modules/ngx_http_brotli_static_module.so";

或静态编译

$ ./configure --add-module=/path/to/ngx_brotli
$ make && make install

配置

    brotli on;
    brotli_static on;
	brotli_comp_level 6;
	brotli_buffers 16 8k;
	brotli_min_length 20;
	brotli_types application/atom+xml application/javascript application/json application/rss+xml
             application/vnd.ms-fontobject application/x-font-opentype application/x-font-truetype
             application/x-font-ttf application/x-javascript application/xhtml+xml application/xml
             font/eot font/opentype font/otf font/truetype image/svg+xml image/vnd.microsoft.icon
             image/x-icon image/x-win-bitmap text/css text/javascript text/plain text/xml;
0

评论区