今天又有小的技术分享会,整理一下学到的东西: Nginx的Gzip压缩的分享,还有就是有个小的知识点,Nginx的版本号一般都是开启的,当然我个人用的是面板,默认是隐藏的,建议还是可以把Nginx的版本号在Nginx配置中隐藏掉:
#nginx版本号,一般推荐关闭
server_tokens OFF;
Nginx实现资源压缩的原理是通过ngx_http_gzip_module模块拦截请求,并对需要做gzip的类型做gzip,ngx_http_gzip_module是Nginx默认集成的,不需要重新编译,直接开启即可。
# 开启gzip gzip on; # 启用gzip压缩的最小文件,小于设置值的文件将不会压缩,0为全部压缩 gzip_min_length 1k;
# gzip 压缩级别,`字越大压缩的越好,也越占用CPU时间 gzip_comp_level 1;
# 进行压缩的文件类型。
其中的值可以在nginx 的 mime.types 文件中找到。
gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png application/vnd.ms-fontobject font/ttf font/opentype font/x-woff image/svg+xml;
# 是否在http header中添加Vary: Accept-Encoding,建议开启 gzip_vary on;
# 禁用IE 6以下 gzip。正则匹配User-Agent中的值,匹配上则不进行gzip gzip_disable "MSIE [1-6]\.";
# 设置用于处理请求压缩的缓冲区数量和大小。比如32 4K表示按照内存页(one memory page)大小以4K为单位(即一个系统中内存页为4K),申请32倍的内存空间。建议此项不设置,使用默认值。
gzip_buffers 32 4k; # 用于识别http协议的版本,早期的浏览器不支持gzip压缩,用户会看到乱码,所以为了支持前期版本加了此选项。默认在http/1.0的协议下不开启gzip压缩。 gzip_http_version 1.1;
# 根据request或响应的相关header的值来决定是否进行gzip.
Nginx作为反向代理的时候启用,根据某些请求和应答来决定是否在对代理请求的应答启用gzip压缩,是否压缩取决于请求头中的“Via”字段,指令中可以同时指定多个不同的参数,意义如下:
expired - 启用压缩,如果header头中包含 "Expires" 头信息
no-cache - 启用压缩,如果header头中包含 "Cache-Control:no-cache" 头信息
no-store - 启用压缩,如果header头中包含 "Cache-Control:no-store" 头信息
private - 启用压缩,如果header头中包含 "Cache-Control:private" 头信息
no_last_modified - 启用压缩,如果header头中不包含 "Last-Modified" 头信息
no_etag - 启用压缩 ,如果header头中不包含 "ETag" 头信息
auth - 启用压缩 , 如果header头中包含 "Authorization" 头信息
any - 无条件启用压缩
off - 关闭压缩
gzip_proxied off;
# 开启之后,接到(静态文件)请求会到url相同的路径的文件系统去找扩展名为”.gz”的文件,如果存在直接把它发送出去,如果不存在,则进行gzip压缩,再发送出去
gzip_static on;
需要先生成.gz的同名文件
压缩文件 tar -zcvf 1.txt.gz 1.txt
使用curl命令查看 gzip_static 是否生效
curl -I -H "Accept-Encoding: gzip,deflate" http://www.testgzip.com/1.txt
测试中,gzip的开启与关闭不影响此配置读取.gz文件
查看当前网站是否开启GZIP压缩和压缩率
推荐