Nginx静态资源部署优化_压缩02
Nginx静态资源压缩
在Nginx的配置文件中可以通过gzip来对静态资源进行压缩
1 | ngx_http_gzip_module模块 # nginx自带 |
Gzip各模块支持配置指令
以下指令都来自于ngx_http_gzip_module模块支持, 该模块nginx内置, 可以直接使用
1 | 模块文档: http://nginx.org/en/docs/http/ngx_http_gzip_module.html |
gzip
gzip on|off 用于开启或关闭gzip功能
1 | http{ |
可以用于http/server/loaction
gzip_types
gzip_types mime-type ... 设置需要压缩的文件mime类型
默认压缩text/html
1 | http{ |
所选值可以从mime.types文件中查找, 也可以使用* 代表所有类型, 但不推荐
gzip_comp_level
gzip_comp_level level 设置Gzip压缩程度
级别从1到9, 压缩程度上升, 压缩效率降低, 9 代表压缩程度最高, 但效率最低
1 | http{ |
gzip_vary
gzip_vary on|off 设置是否携带gzip响应头
gzip_vary 用于设置进行压缩发送是否携带 Vary:Accept-Encoding 响应头, 告诉接收方该资源经过了Gzip压缩处理
1 | http{ |
可用于http/server/location
gzip_buffers
gzip_buffers number size 用于设置压缩的缓冲区数量及大小
该值设定一般和服务器操作系统有关, 一般使用默认值即可
1 | http{ |
gzip_disable
gzip_disable regex .. 用于使用正则针对不同的浏览器禁用Gzip功能
regex匹配Request Headers中User-Agent 数据
1 | http{ |
gzip_http_version
gzip_http_version 1.0|1.1 针对不同的HTTP协议版本, 选择性开启或关闭gzip
该指令用于指定最低HTTP协议版本, 一般用默认值即可
1 | http{ |
gzip_min_length
gzip_min_length 指定需要压缩的最小文件长度
默认20, 从头信息中的Content-Length中获取
1 | nginx 计量但对: bytes[字节] / kb[千字节] / M[兆] |
1 | http{ |
gzip_proxied
gzip_proxied off|expired|no-cache|no-store|private|no_last_modified|no-etag|auth|any 设置是否对服务端返回结果进行Gzip压缩
反向代理相关
- off 关闭nginx服务器对后台服务器返回结果的压缩, 忽略其他参数
- expired 启用压缩, 如果响应头headers头中包含
Expires头信息 - no-cache 启用压缩, 如果响应头headers头中包含
Cache-Control:no-cache头信息 - no-store 启用压缩, 如果响应头headers头中包含
Cache-Control:no-store头信息 - private 启用压缩, 如果响应头headers头中包含
Cache-Control:private头信息 - no-last-modified 启用压缩, 如果响应头headers头中不包含
Last-Modified头信息 - no-etag 启用压缩, 如果响应头headers头中不包含
ETag头信息 - auth 启用压缩, 如果响应头headers头中包含
Authorization头信息 - any 为所有代理请求无条件启用压缩
Gzip压缩功能配置
编辑新建nginx_zip.conf文件
1 | gzip on; # 开启gzip功能 |
将配置文件引入nginx.conf
1 | include nginx_zip.conf; |
Gzip和sendfile的冲突解决
Gzip需要应用程序用户态进行操作文件并压缩发送, 但sendfile是直接从内核缓冲区发送到Socket缓冲区的, 会导致功能冲突
可以使用ngx_http_gzip_static_module 模块的 gzip_static 指令解决问题

解决方案是在请求资源之前, 就将资源压缩, jquery.js 压缩为 jquery.js.gz, 在用户请求资源时, 发送压缩后的文件给用户, 由浏览器进行解压缩显示
gzip_static
gzip_static on|off|always;
访问与资源同名的.gz 文件时, response中以gzip相关的header返回.gz文件内容
添加上述命令后, 若报错 unknown directiove ‘gzip_static’, 原因是Nginx默认没有添加对应模块, 需要手动安装 ./configure –with-http_gzip_static_module
1 | http{ |
1 | gzip /var/www/test/images/jquery.js |