Nginx:17---反向代理之(反向代理服务器的性能调优:缓冲数据缓存数据存储数据压缩数据(gzip模块))
Posted 董哥的黑板报
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx:17---反向代理之(反向代理服务器的性能调优:缓冲数据缓存数据存储数据压缩数据(gzip模块))相关的知识,希望对你有一定的参考价值。
一、缓冲数据
二、缓存数据
三、存储数据
四、压缩数据(gzip模块、gzip_static模块)
- Nginx中提供了gzip模块,可以提升网站的速度,优化带宽可以帮助减少相应的传输时间
- gzip模块在nginx编译时默认被启用,因此我们可以直接使用。gzip_static模块在最后介绍
- 图片、视频、音频等二进制文件没有必要进行压缩,因为gzip一般都是无损压缩,对于图片、视频、音频等二进制文件压缩效果不太明显。关于数据流压缩原理可以参阅:Linux(程序设计):28---数据流压缩原理(Deflate压缩算法、gzip、zlib)_董哥的黑板报的博客-CSDN博客_linux压缩算法
gzip模块的指令
- 指令如下:
gzip
- 打开或关闭gzip
gzip_buffers
- 设置用于处理请求压缩的缓冲区数量和大小。比如 32 4K 表示按照内存页(one memory page)大小以 4K 为单位(即一个系统中内存页为 K),申请 32 倍的内存空间。建议此项不设置,使用默认值。
gzip_comp_level
- 设置 gzip 压缩级别,级别越底压缩速度越快文件压缩比越小,反之速度越慢文件压缩 比越大。
gzip_disable
- 通过表达式,表明哪些UA头不使用 gzip 压缩
gzip_min_length
- 正整数,单位为字节,也可用 k 表示千字节,比如写成 1024 与 1k 都可以,效果是一样 的,表示当资源大于 1k 时才进行压缩,资源大小取响应头中的 Content-Length 进行比 较,经测试如果响应头不存在 Content_length 信息,该限制参数对于这个响应包是不起 作用的;另外此处参数值不建议设的太小,因为设的太小,一些本来很小的文件经过压缩后反而变大了,官网没有给出建议值,在此建议 1k 起,因为小于 1k 的也没必要压 缩,并根据实际情况来调整设定。
gzip_http_version
- 用于识别 http 协议的版本,早期的浏览器不支持 gzip 压缩,用户会看到乱码,所以 为了支持前期版本加了此选项。默认在 http/1.0 的协议下不开启 gzip 压缩
- 在应用服务器前,如果还有一层 Nginx 的集群作为负载均衡,在这一层上,若果没有开 启 gzip
- 如果我们使用了 proxy_pass 进行反向代理,那么 nginx 和后端的 upstream server 之间默认是用 HTTP/1.0 协议通信的。
- 如果我们的 Cache Server 也是 nginx,而前端的 nginx 没有开启 gzip。
- 同时,我们后端的 nginx 上没有设置 gzip_http_version 为 1.0,那么 Cache 的 url 将不会进行 gzip 压缩。
gzip_proxied
- Nginx 做为反向代理的时候启用:
- off – 关闭所有的代理结果数据压缩
- 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 – 无条件压缩所有结果数据
gzip_types
- 设置需要压缩的 MIME 类型,如果不在设置类型范围内的请求不进行压缩。匹配 MIME 类型 进行压缩,(无论是否指定)"text/html"类型总是会被压缩的。
gzip_vary
- 增加响应头 "Vary: Accept-Encoding" 告诉接收方发送的数据经过了压缩处理,开启后的效果是在响应头部添加了 AcceptEncoding:gzip,这对于本身不支持 gzip 压缩的客户端浏览器有用
配置范例
- 配置1:
http gzip on; gzip http_version 1.0; gzip_comp_level 2; gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript application/json; # msie6是MSIE[4-6]/.的简写 gzip_disable msie6;
- 配置2:
# 开启 gzip gzip on; # 启用 gzip 压缩的最小文件,小于设置值的文件将不会压缩 gzip_min_length 1k; # gzip 压缩级别,1-9,数字越大压缩的越好,也越占用 CPU 时间,后面会有详细说明 gzip_comp_level 1; # 进行压缩的文件类型。javascript 有多种形式。其中的值可以在 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 gzip_disable "MSIE [1-6]\\."; # 设置压缩所需要的缓冲区大小 gzip_buffers 32 4k; # 设置 gzip 压缩针对的 HTTP 协议版本,没做负载的可以不用 # gzip_http_version 1.0; # 开启缓存 location ~* ^.+\\.(ico|gif|jpg|jpeg|png)$ access_log off; expires 2d; location ~* ^.+\\.(css|js|txt|xml|swf|wav)$ access_log off; expires 24h; location ~* ^.+\\.(html|htm)$ expires 1h; location ~* ^.+\\.(eot|ttf|otf|woff|svg)$ access_log off; expires max; # 格式 # expires 30s; # expires 30m; # expires 2h; # expires 30d;
与文件大小有关的参数
- gzip_buffers:启用gzip压缩之后,你会发现大文件被截断了,原因可能在于gzip_buffers。默认值缓冲区值是32个4KB或16个8KB(根据不同的平台设定),这使得总缓冲大小为128KB,也就是说Nginx不能压缩超过128KB的文件。如果你使用了大的解压缩JavaScript库,那么你将会发现它超过了这个限制。如果是这种情况的话,你可以增加缓冲的数量,从而增加整体的缓冲数量
- 例如下面的配置文件:
- gzip_buffer设置为40*4*1024=163840字节(160KB),因此超过160KB的文件将不会被Nginx进行压缩
- gzip_min_length:告诉Nginx仅对大于1KB的文件进行压缩
- gzip_com_level:速度和压缩文件大小之间的良好折中是将该指令设置为4或5
http gzip on; gzip_min_length 1024; gzip_buffers 40 4k; gzip_comp_level 5; gzip_types text/plain application/x-javascript application/json;
gzip_static模块
- 除了在相应的过程中使用压缩外,Nginx还能够使用gzip_static模块投递预压缩的文件
- 该模块默认没有被编译进Nginx的二进制文件中,因此在编译Nginx时可以添加--with-http_gzip_static_module参数来启用该模块
- 该模块本身只有一个指令,也就是gzip_static
- 为了确定合适检查使用预压缩的文件,可以使用如下的gzip指令:
- gzip_http_version
- gzip_proxied
- gzip_disable
- gzip_vary
- 演示案例:在下面的配置中,我们对投递的文件启用预压缩。如果请求包含认证头,以及响应包含Expires或者Cache-Control中的一个头,则禁用缓存
http gzip_static on; gzip_proxied expired no-cache no-store private auth;
以上是关于Nginx:17---反向代理之(反向代理服务器的性能调优:缓冲数据缓存数据存储数据压缩数据(gzip模块))的主要内容,如果未能解决你的问题,请参考以下文章