Nginx:17---反向代理之(反向代理服务器的性能调优:缓冲数据缓存数据存储数据压缩数据(gzip模块))

Posted 董哥的黑板报

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx:17---反向代理之(反向代理服务器的性能调优:缓冲数据缓存数据存储数据压缩数据(gzip模块))相关的知识,希望对你有一定的参考价值。

一、缓冲数据

二、缓存数据

三、存储数据

四、压缩数据(gzip模块、gzip_static模块)

  • Nginx中提供了gzip模块,可以提升网站的速度,优化带宽可以帮助减少相应的传输时间

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模块))的主要内容,如果未能解决你的问题,请参考以下文章

Nginx之什么是反向代理

nginx实践之代理服务(正向代理与反向代理介绍)

Nginx入门与基础之反向代理配置介绍

浅谈Nginx之反向代理与负载均衡

nginx之反向代理

Nginx之反向代理