[转帖]Nginx HTTP模块

nginx,http,模块 · 浏览次数 : 0

小编点评

# Generate Content **Nginx Configuration** * gzip_buffershttp,server,location32 4k --设置压缩缓冲区大小 * gzip_comp_levelhttp,server,location1 --设置压缩级别 * gzip_typeshttp,server,locationtext/html--设置可进行 gzip 压缩的响应数据的 MIME 类型 * gzip_varyon,server,locationtext/html--设置可进行 gzip 压缩的响应数据的 MIME 类型 **Gunzip Module Configuration** * ngx_http_gunzip_module --设置动态解压支持 * ngx_http_gunzip_module --设置静态压缩指令 * ngx_http_gunzip_module --设置响应数据格式 **Static Compression Configuration** * ngx_http_gzip_static_module --设置静态压缩指令 * ngx_http_gzip_static_module --设置响应数据格式 * ngx_http_gzip_static_module --设置动态压缩缓存区大小 **Example Configuration** ```nginx # gzip_static always; #静态压缩指令 server { ... gzip_static on; ... } # gunzip 模块配置 ngx_http_gunzip_module { ... dynamic_files { ... allow_on_header = gzip_content_type; ... } ... } ``` **Note** * These are just examples; you can customize them to suit your specific requirements. * Make sure to restart Nginx after making changes to the configuration.

正文

https://www.cnblogs.com/lizexiong/p/15039009.html

 

导航:

  这里将Nginx的一些配置进行整合。根据导航比较容易找到对应的文档。资料来自于weixueyuan

  1.Nginx核心配置详解

  2.Nginx HTTP模块

  3.Nginx搭建 Web服务

  4.Nginx代理服务器

  5.Nginx 缓存

  6.Nginx负载均衡

  7.Nginx日志管理

  8.Nginx在微服务中的应用

  Nginx 是模块化的代码架构,其代码由核心代码与功能模块代码构成。Nginx 的主要功能模块是 HTTP 功能模块,HTTP 功能模块在 HTTP 核心功能的基础上为 Nginx 对 HTTP 请求的处理流程提供了扩展功能,这些扩展功能可以让用户很方便地应对访问控制、数据处理、代理缓存等各种复杂的场景应用,同时也让有开发能力的用户能够积极参与,不断增强 Nginx 的功能。

1.Nginx镜像模块:ngx_http_mirror_module

  Nginx 中镜像模块的功能是将用户的访问请求镜像复制到指定的 URI,通过 location 的 URI 匹配将流量发送到指定的服务器。用户请求的实际请求响应通过 Nginx 返回客户端,镜像服务器的请求响应则会被 Nginx 服务器丢弃。

  镜像请求与实际请求是异步处理的,对实际请求无影响。该模块的内置配置指令如下面表格中所示。

表:访问镜像指令
名称 访问镜像指令
指令 mirror
作用域 http、server、location
默认值 off
指令说明 将用户的访问请求镜像到指定的 URI,同级支持多个 URI

  配置样例如下:

复制代码
 server {
    listen 8080;
    root /opt/nginx-web/www;
    location / {
        mirror /benchmark;
        index index.html;
    }

    location = /benchmark {
        internal;
        proxy_pass http://192.168.2.145$request_uri;
    }
}
复制代码

 

表:镜像请求体指令
名称 镜像请求体指令
指令 mirror_request_body
作用域 http, server, location
默认值 on
指令值可选项 on 或 off
指令说明

将用户的访问请求体同步镜像到指定的 URI,当启用该指令时,创建镜像子请求前会优先读取并缓存客户端的请求体内容,

同时 proxy_request_buffering、fastcgi_request_buffering、scgi_request_buffering 和 uwsgi_request_buffering 

等指令的不缓存设置将被关闭

  配置样例如下:

复制代码
server {
    listen 8080;
    server_name localhost;
    root /opt/nginx-web/www;
    mirror_request_body off;
    location / {
        index index.html;
        mirror /accesslog;
    }

    location = /accesslog {
        internal;
        proxy_pass http://192.168.2.145/accesslog/${server_name}_$server_port$request_uri;
    }
}
复制代码

  如果该指令值为 off 则不同步请求体。

  配置样例如下:

复制代码
server {
    listen 8080;
    root /opt/nginx-web/www;
    location / {
        mirror /benchmark; # 镜像用户请求
        mirror /benchmark; # 镜像用户请求
        mirror /benchmark; # 镜像用户请求
        index index.html;
    }

    location = /benchmark {
        internal;
        proxy_pass http://192.168.2.145$request_uri;
    }
}
复制代码

  访问镜像模块可以将用户请求同步镜像到指定的服务器,同时还可以对用户的流量进行放大,通常可以在镜像线上流量后进行压力测试或预生产环境验证。

 

2.Nginx referer:请求头控制模块

  referer 请求头控制模块可以通过设置请求头中的属性字段 Referer 的值控制访问的拒绝与允许。Referer 字段用来表示当前请求的跳转来源,由于该字段可能会涉及隐私权问题,部分浏览器允许用户不发送该属性字段,因此也会存在浏览器正常的请求头中无 Referer 字段的情况。

  另外,有些代理服务器或防火墙也会把 Referer 字段过滤掉。通常情况下,伪造 Referer 字段的内容是很容易的,因此该模块主要用于浏览器正常发送请求中 Referer 值的过滤。

  虽然通过 Referer 字段进行来源控制并不十分可靠,但用在防盗链的场景中还是基本可以满足需求的。该模块的内置配置指令如下表所示。

指令 作用域 默认值  指令说明
referer_hash_max_size server, location 2048 referer 指令中,存储变量的哈希表的大小
referer_hash_bucket_size server, location 64 referer 指令中,存储变量的哈希桶的大小
valid_referers server, location --

当用户的 HTTP 头的属性字段 Referer 的值符合指令值的检测时,

设置变量 $invalid_referer 为空

  referer 指令值参数如下表所示。

参数名称 参数说明
none Referer 的值为空
blocked 代理服务器或防火墙过滤后的 Referer 值,这些值都不以 http:// 或 https:// 开头
server_names Referer 的值中包含一个服务器名

  配置样例如下:

复制代码
server{
    listen 8080;
    server_name nginxtest.org;
    root /opt/nginx-web/www;
    valid_referers none blocked *.nginxtest.org;
         # 当Referer为空或内容不包含“http://”或以“https://”开头的主机名为“*.nginxtest.org”时允许访问
    if ($invalid_referer) {
        return 403;
    }
}
复制代码

  指令值为字符串时,既可以是包含前缀或后缀的主机名,也可以是包含主机名的 URI。

  指令值为正则表达式时,必须以~开头,Nginx 将从“http://”或“https://”之后的字符串开始匹配。

  默认变量 $invalid_referer 的值为 1,当 Referer 的值与指令值的内容匹配时,$invalid_referer 的值为空。

 

3.Nginx allow、deny:IP访问控制模块

  Nginx 中IP访问控制模块名称为 ngx_http_access_module,该模块可以对客户端的源 IP 地址进行允许或拒绝访问控制。该模块的内置配置指令如下面表格中所示。

表:允许访问指令
名称 允许访问指令
指令  allow
作用域 http、server、location、limit_except
默认值 --
指令说明 允许指定源 IP 的客户端请求访问

 

表:拒绝访问指令
名称 拒绝访问指令
指令 deny
作用域 http、server、location、limit_except
默认值 --
指令说明 拒绝指定源 IP 的客户端请求访问

  配置样例如下:

复制代码
location / {
    deny  192.168.1.1;          # 禁止192.168.1.1
    allow 192.168.0.0/24;       # 允许192.168.0.0/24的IP访问
    allow 10.1.1.0/16;          # 允许10.1.1.0/16的IP访问
    allow 2001:0db8::/32;
    deny  all;
}
复制代码

  Nginx 会按照自上而下的顺序进行匹配。

 

4.Nginx用户cookie模块

  用户 cookie 模块(ngx_http_userid_module)的作用是为客户端设置 cookie 以标识不同的访问用户。可以通过内部变量 $uid_got 和 $uid_set 记录已接收和设置的 cookie。该模块的内置配置指令如下面表格中所示。

表:用户cookie指令
名称 用户 cookie 指令
指令 userid
作用域 http、server、location
默认值 off
指令值可选项 on、off、v1 或 log
指令说明 设置关闭或启用用户 cookie 及启用的方式

  当指令值为 off 时,关闭用户 cookie 接收和记录功能。

  当指令值为 on 时,启用用户 cookie 接收和记录功能,默认为 v2 版本设置 cookie。设置 cookie 的响应头标识为 Set-Cookie2。

  当指令值为 v1 时,使用 v1 版本设置 cookie,设置 cookie 的响应头标识为 Set-Cookie。

  当指令值为 log 时,不设置用户 cookie,但对接收到的 cookie 进行记录。

 

表:用户 cookie 域指令
名称 用户 cookie 域指令
指令 userid_domain
作用域 http, server, location
默认值 none
指令说明 设置用户 cookie 中的域名,none 表示禁用 cookie 的域设置

 

表:用户 cookie 过期指令
名称 用户 cookie 过期指令
指令 userid_expires
作用域 http, server, location
默认值 off
指令值可选项 time 或 max 或 off
指令说明

设置用户 cookie 的过期时间,time 表示客户端保存 coo

kie的时间,max 表示 cookie 的过期时间,默认为会话结

束即过期

 

表:用户 cookie 标识指令
名称 用户 cookie 标识指令
指令 userid_mark
作用域 http, server, location
默认值 off
指令值可选项 letter 或 digit 或 = 或 off
指令说明

设置用户 cookie 的标识机制并设置用作标记的字符。该

标识机制用于在保存客户标识符的同时添加或修改 useri

d_p3p 及 cookie的过期时间

  用作标记的指令值可以是任意英文字母(区分大小写)、数字或“=”。

  userid_mark 设置完成后,将与用户 cookie 中传送的 Base64 格式的标识的第一个字符进行比较,如果不匹配,则重新发送用户标识、userid_p3p 及 cookie 的过期时间。

表:用户 cookie 名称指令
名称 用户 cookie 名称指令
指令 userid_name
作用域 http, server, location
默认值 uid
指令说明 设置 cookie 名称

 

表:用户 p3p 指令
名称 用户 p3p 指令
指令 userid_p3p
作用域 http、server、location
默认值 none
指令说明 设置是否将 p3p 头属性字段同 cookie 一同发送

  P3P 是 W3C 推荐的隐私保护标准,P3P 头属性字段通常用于解决与支持 P3P 协议的浏览器的跨域访问问题。

表:用户 cookie 路径指令
名称 用户 cookie 路径指令
指令 userid_path
作用域 http, server, location
默认值 --
指令说明 设置 cookie 路径

 

表:用户 cookie 源服务器指令
名称  用户 cookie 源服务器指令
指令 userid_service
作用域 http, server, location
默认值 --
指令说明

设置 cookie 的发布服务器。当 cookie 标识符由多个服务器发出时,为确保用户标识的唯一性,

则应为每个服务器分配编号,cookie 版本 1 时默认为 0,cookie 版本 2 时默认为服务器 IP

地址的最后 4 个八位字节组成的数字

  配置样例如下:

复制代码
server {
    listen 8083;
    server_name example.com;
    root /opt/nginx-web;

    auth_request /auth;

    userid         on;
    userid_name    uid;
    userid_domain  example.com;
    userid_path    /;
    userid_expires 1d;
    userid_p3p     'policyref="/w3c/p3p.xml", CP="CUR ADM OUR NOR STA NID"';

    location / {
        index  index.html index.htm;
        add_header    Set-Cookie "username=$remote_user";
    }
    location /auth {
        proxy_pass_request_body off;
        proxy_set_header Content-Length "";
        proxy_set_header X-Original-URI $request_uri;
        proxy_pass http://192.168.2.145:8080/HttpBasicAuth.php;
    }
}
复制代码

 

5.Nginx limit_conn:并发连接数限制模块

  Nginx 中的并发连接数限制模块(ngx_http_limit_conn_module)能够对访问连接中含有指定变量且变量值相同的连接进行计数,指定的变量可以是客户端 IP 地址或请求的主机名等。当计数值达到 limit_conn 指令设定的值时,将会对超出并发连接数的连接请求返回指定的响应状态码(默认状态码为 503)。

  该模块只会对请求头已经完全读取完毕的请求进行计数统计。由于 Nginx 采用的是多进程的架构,该模块通过共享内存存储计数状态以实现多个进程间的计数状态共享。该模块的内置配置指令如下面表格中所示。

表:计数存储区指令
名称 计数存储区指令
指令 limit_conn_zone
作用域 http
默认值 --
指令说明 设定用于存储指定变量计数的共享内存区域

 

表:连接数设置指令
名称 连接数设置指令
指令 limit_conn
作用域 http, server, location
默认值 --
指令说明 设置指定变量的最大并发连接数

 

表:连接数日志级别指令
名称 连接数日志级别指令
指令 limit_conn_log_level
作用域 http、server、location
默认值 error
指令值可选项 info、notice、warn、error
指令说明 当指定变量的并发连接数达到最大值时,输出日志的级别

 

表:连接数状态指令
名称 连接数状态指令
指令 limit_conn_status
作用域 http、server、location
默认值 503
指令说明 当指定变量的并发连接数达到最大值时,请求返回的状态码

  配置样例如下:

复制代码
limit_conn_zone $binary_remote_addr zone=addr:10m;  # 对用户IP进行并发计数,将计数内存区命名为addr,设置计数内存区大小为10MB
                                                                                       
server {
    location /web1/ {
        limit_conn addr 1;                                                      # 限制用户的并发连接数为1
    }
}
复制代码

  limit_conn_zone 的格式为 limit_conn_zone key zone=name:size。

  limit_conn_zone 的 key 可以是文本、变量或文本与变量的组合。

  $binary_remote_addr 为 IPv4 时占用 4B,为 IPv6 时占用 16B。

  limit_conn_zone 中 1MB 的内存空间可以存储 32 000 个 32B 或 16 000 个 64B 的变量计数状态。

  变量计数状态在 32 位系统平台占用 32B 或 64B,在 64 位系统平台占用 64B。

  并发连接数同样支持多个变量的同时统计,配置样例如下:

复制代码
limit_conn_zone $binary_remote_addr zone=perip:10m;
limit_conn_zone $server_name zone=perserver:10m;

server {
    ...
    limit_conn perip 10;
    limit_conn perserver 100;
}
复制代码

 

6.Nginx index:首页处理

  HTTP 请求经过一系列的请求流程处理后,最终将读取数据并把数据内容返回给用户。当用户请求没有明确指定请求的文件名称时,Nginx 会根据设定返回默认数据,实现这一功能包含ngx_http_index_module、ngx_http_random_index_module、ngx_http_autoindex_module 这 3 个模块。

  常用的首页处理配置指令如下面表格中所示。

表:首页指令
名称 首页指令
指令 index
作用域 http、server、location
默认值 index index.html
指令说明 设置 HTTP 服务器的默认首页

  配置样例如下:

location / {
    index index.$geo.html index.html;
}

  指令值为多个文件时,会按照从左到右的顺序依次查找,找到对应文件后将结束查找。

 

表:随机首页指令
名称 随机首页指令
指令 random_index
作用域 location
默认值 off
指令值可选项 on 或 off
指令说明 随机读取文件目录下的文件内容为首页内容

  配置样例如下:

root /opt/nginx-web/html;
location / {
    random_index on;
}

  该指令的执行优先级高于 index 指令,文件目录中的隐藏文件将被忽略。

 

表:自动首页指令
名称 自动首页指令
指令  autoindex
作用域 http、server、location
默认值 off
指令值可选项 on 或 off
指令说明 自动创建目录文件列表为目录首页

 

表:自动首页格式指令
名称 自动首页格式指令
指令 autoindex_format
作用域 http、server、location
默认值 html
指令值可选项 html 或 xml 或 json 或 jsonp
指令说明 设置 HTTP 服务器的自动首页文件格式

 

表:自动首页文件大小指令
名称  自动首页文件大小指令
指令 autoindex_exact_size
作用域 http、server、location
默认值 on
指令值可选项 on 或 off
指令说明

设置 HTTP 服务器的自动首页显示文件大小。默认文件大小单位为 Byte,

当指令值为 off 时,将根据文件大小自动换算为 KB 或者 MB 或者 GB 的单位大小

 

表:自动首页时间指令
名称 自动首页时间指令
指令 autoindex_localtime
作用域 http、server、location
默认值 off
指令值可选项 on 或 off
指令说明

按照服务器时间显示文件时间。默认显示的文件时间为 GMT 时间。

当指令值为 on 时,显示的文件时间为服务器时间

  配置样例如下:

location / {
    autoindex on;
    autoindex_format html;
    autoindex_exact_size off;
    autoindex_localtime on;
}

 

7.Nginx请求频率限制模块

  Nginx 的请求频率限制模块(ngx_http_limit_req_module)会对指定变量的请求次数进行计数,当该变量在单位时间内的请求次数超过设定的数值时,后续请求会被延时处理,当被延时处理的请求数超过指定的队列数时,将返回指定的状态码(默认状态码为 503)。

  通常该模块被用于限定同一 IP 客户端单位时间内请求的次数。该模块通过共享内存存储计数状态以实现多个工作进程间的同一变量计数状态的共享。该模块的内置配置指令如下面表格中所示。

表:计数存储区指令
名称 计数存储区指令
指令 limit_req_zone
作用域 http
默认值 --
指令说明 设定用于存储指定变量请求计数的共享内存区域

 

表:请求限制设置指令
名称 请求限制设置指令
指令 limit_req
作用域 http, server, location
默认值 --
指令说明 启用请求限制并进行请求限制的相关配置

 

表:请求限制日志级别指令
名称 请求限制日志级别指令
指令 limit_req_log_level
作用域 http, server, location
默认值 error
指令值可选项 info, notice, warn, error
指令说明 当指定变量的并发连接数达到最大值时,输出日志的级别

 

表:请求限制状态指令
名称 请求限制状态指令
指令 limit_req_status
作用域 http, server, location
默认值 503
指令说明 当指定变量的并发连接数达到最大值时,请求返回的状态码

  配置样例如下:

复制代码
http {
    limit_req_zone $server_name zone=addr:10m rate=1r/s;
                # 限制访问当前站点的请求数,对站点请求计数,将计数内存区命名为addr,
                # 设置计数内存区大小为10MB,请求限制为1秒1次
    server {
        location /search/ {
            limit_req zone=one;       
                # 同一秒只接收一个请求,其余的立即返回状态码503,直到第2秒才接收新的请求
            limit_req zone=one burst=5;
                # 同一秒接收6个请求,其余的返回状态码503,只处理一个请求,其余5个请求进入队
          # 列,每秒向Nginx释放一个请求进行处理,同时允许接收一个新的请求进入队列
            limit_req zone=one burst=5 nodelay; 
                # 同一秒接收6个请求,其余的返回状态码503,同时处理6个请求,6秒后再接收新的请求
        }
    }
}
复制代码

  limit_req_zone 的 rate 参数的作用是对请求频率进行限制,有 r/s(每秒的请求次数)和 r/m(每分钟的请求次数)两个频率单位,也可根据每秒的次数换算成毫秒单位的次数。1MB 内存大小大约可以存储 16000 个 IP 地址的状态信息。

  limit_req 的 burst 参数相当于一个缓冲容器,该容器内可容纳 burst 所设置的数量的请求,没有 nodelay 参数时,将匀速向 Nginx 释放需要处理的请求。未进入 burst 容器队列的请求将被返回状态码 503 或由 limit_req_status 指令指定的状态码。

  limit_req 的 nodelay 参数是指对请求队列中的请求不进行延时等待,而是立即处理。

  请求频率同样支持多个变量的同时计数及叠加,配置样例如下:

复制代码
limit_req_zone $binary_remote_addr zone=perip:10m rate=1r/s;
limit_req_zone $server_name zone=perserver:10m rate=10r/s;  

server {
    ...
    limit_req zone=perip burst=5 nodelay;
    limit_req zone=perserver burst=10;
}
复制代码

 

8.Nginx expires:页面缓存时间配置

  Nginx 缓存的设置可以提高网站性能,对于网站的图片,尤其是新闻网站,图片一旦发布,改动的可能是非常小的,为了减小对服务器请求的压力,提高用户浏览速度,我们可以通过设置 Nginx 中的 expires 指令,让用户访问一次后,将图片缓存在用户的浏览器中。

  需要注意的是,这种缓存方式只能在用户不对浏览器强制刷新的情况下生效,如果用户通过 url 来进行访问,是可以访问到缓存的。

  Nginx 中的 expires 指令的介绍如下表所示:

名称 缓存时间指令
指令 expires
作用域 http、server、location、if in location
默认值 off
指令值可选项 时间或 epoch 或 max 或 off
指令说明

当响应状态码为 200、201、204、206、301、302、303、304、307 或 308 时,

对响应头中的属性字段“Expires”和“Cache-Control”进行添加或编辑操作

  当指令值为时间时,既可以是正值也可以是负值。Expires 的值为当前时间与指令值的时间之和。当指令值的时间为正或 0 时,Cache-Control 的值为指令值的时间。当指令值的时间为负时,Cache-Control 的值为 no-cache。

  当指令值为时间时,可用前缀@指定一个绝对时间,表示在当天的指定时间失效。

  当指令值为 epoch 时,Expires 的值为 Thu,01 Jan 1970 00:00:01 GMT,Cache-Control 的值为 no-cache。

  当指令值为 max 时,Expires 的值为 Thu,31 Dec 2037 23:55:55 GMT,Cache-Control 的值为 10 年。

  当指令值为 off 时,不对响应头中的属性字段 Expires 和 Cache-Control 进行任何操作。

  配置样例如下:

复制代码
map $content_type $expires {          # 根据$content_type的值,对变量$expires进行赋值
    default         off;                            # 默认不修改Expires和Cache-Control的值
    application/pdf 42d;                     # application/pdf类型为42天
    ~image/         max;                       # 图片类型为max
}

server {
    expires    24h;                             # 设置Expires的值为当前时间之后的24小时,
                                                   # Cache-Control的值为24小时
    expires    modified +24h;           # 编辑Expires的值增加24小时,Cache-Control的值增
                                                       # 加24小时
    expires    @15h;                         # 设置Expires的值为当前日的15点,Cache-Control的值
                                                       # 为当前时间到当前日15点的时间差
    expires    $expires;                     # 根据变量$expires的内容设置缓存时间
    add_header Cache-Control no-cache; 
    add_trailer  X-Always $host always;
}
复制代码

 

9.Nginx开启gzip压缩及相关配置详解

  为提高用户获取响应数据的速度,Nginx 服务器可以将响应数据进行 gzip 压缩,在减小响应数据的大小后再发送给用户端浏览器,相对于使用户浏览 Web 页面,上述方式显示速度更快。

  要想启用响应数据 gzip 压缩(ngx_http_gzip_module 模块)功能,需要用户浏览器也支持 gzip 解压功能,目前大多数浏览器都支持 gzip 压缩数据的显示。Nginx 服务器接收客户端浏览器发送的请求后,通过请求头中的属性字段 Accept-Encoding 判断浏览器是否支持 gzip 压缩,对支持 gzip 压缩的浏览器将发送 gzip 压缩的响应数据。

  ngx_http_gzip_module 模块的内置配置参数如下表所示。

指令 作用域 默认值 指令值可选项 指令说明
gzip http、server、location、if in location off on 或 off 启用 gzip 功能
gzip_buffers http、server、location 32 4k 或 16 8k -- 设置 gzip 压缩缓冲区
gzip_comp_level http、server、location 1 -- 设置 gzip 压缩级别,取值范围为 1~9,该指令值越大,压缩程度越高
gzip_disable http、server、location -- -- 当请求头中的属性字段 User-Agent 的内容与指令值正则匹配时关闭 gzip 压缩功能
gzip_http_version http、server、location 1.1 1.0 或 1.1 设置压缩请求的最早 HTTP 协议版本
gzip_min_length http、server、location 20 --

设置启用 gzip 压缩的响应数据的最小长度,判断依据为响应头中 Content-Length 的值。

如果 Content-Length 不存在,则该指令无效;如果指令值为 0,则表示全部压缩

gzip_proxied http、server、location off

off 或 expired 或 no-cache

或 no-store或 private

或 no_last_modified

或 no_etag 或 auth

或 any

根据被代理服务器返回响应数据的响应头属性字段判断是否启用 gzip 压缩
gzip_types http、server、location text/html -- 设置可进行 gzip 压缩的响应数据的 MIME 类型,指令值为 * 时表示所有 MIME 类型
gzip_vary http、server、location off on 或 off

在响应头中添加 Vary:Accept-Encoding,返回给前端代理或 CDN 服务器,用于判岗是否

向客户端发送 gzip 的缓存副本,避免代理或 CDN 服务器将 gzip 压缩后的缓存副本响应

给不具备 gzip 解压能力的浏览器

  其中 gzip_proxied 指令的指令值可选项说明如下:

    • off:关闭该指令功能;
    • expired:若 HTTP 响应头中包含属性字段 Expires,则启用压缩;
    • no-cache:若 HTTP 响应头中包含属性字段 Cache-Control:no-cache,则启用压缩;
    • no-store:若 HTTP 响应头中包含属性字段 Cache-Control:no-store,则启用压缩;
    • private:若 HTTP 响应头中包含属性字段 Cache-Control:private,则启用压缩;
    • no_last_modified:若 HTTP 响应头中不包含属性字段 Last-Modified,则启用压缩;
    • no_etag:若 HTTP 响应头中不包含属性字段 ETag,则启用压缩;
    • auth:若 HTTP 响应头中包含属性字段 Authorization,则启用压缩;
    • any:对所有响应数据启用压缩。

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

  ngx_http_gunzip_module 模块的内置配置指令如下表所示。

指令 作用域 默认值 指令值可选项 指令说明
gunzip http、server、location off  on 或  off 设置是否启用动态解压支持
gunzip_buffers http、server、location 32 4K -- 设置用于解压的缓冲区大小

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

  ngx_http_gzip_static_module 模块的内置配置指令如下表所示。

名称 静态压缩指令
指令 gzip_static
作用域 http、server、location
默认值 off
指令值可选项 on 或 off 或 always
指令说明 启用压缩数据读取功能

  gzip_static 指令的指令值可选项说明如下:

    • on:不检查客户端是否支持 gzip 压缩数据,始终发送 gzip 压缩数据;
    • always:不检查客户端是否支持 gzip 压缩数据,始终发送 gzip 压缩数据;
    • 该指令的执行优先级高于 gzip 指令;
    • 开启该指令后,默认优先查找以 .gz 为后缀的文件;
    • gzip_types 指令对 gzip_static 的设置无效。

  配置样例如下:

复制代码
gzip_static always;                  # 始终发送静态的gzip压缩数据
gunzip on;                           # 若客户端浏览器不支持gzip压缩数据,则解压后发送
gunzip_buffers 16 8k;                                         # 解压缓冲区大小为128KB
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/plain application/x-javascript
                text/css application/xml text/javascript
                application/x-httpd-php image/jpeg
                image/gif image/png; # 对指定的MIME类型数据启用动态压缩
gzip_vary on;                        # 向前端代理或缓存服务器发送添加“Vary: Accept-
                                     # Encoding”的响应数据
复制代码

与[转帖]Nginx HTTP模块相似的内容:

[转帖]Nginx HTTP模块

https://www.cnblogs.com/lizexiong/p/15039009.html 导航: 这里将Nginx的一些配置进行整合。根据导航比较容易找到对应的文档。资料来自于weixueyuan 1.Nginx核心配置详解 2.Nginx HTTP模块 3.Nginx搭建 Web服务 4

[转帖]Nginx Http 模块中 Upstream 的 keepalive 参数配置注意事项

Nginx Http 模块中 Upstream 的 keepalive 参数配置注意事项 摘要 在高并发环境下 keepalive 参数配置不当容易产生大量 TIME_WAIT,导致端口耗尽,服务异常。 keepalive 值应该大于等于 upstream 中 server 的数量。(建议是 ser

[转帖]Nginx核心配置详解

https://www.cnblogs.com/lizexiong/p/15036707.html 导航: 这里将Nginx的一些配置进行整合。根据导航比较容易找到对应的文档。资料来自于weixueyuan 1.Nginx核心配置详解 2.Nginx HTTP模块 3.Nginx搭建 Web服务 4

[转帖]Nginx代理服务器

https://www.cnblogs.com/lizexiong/p/15045187.html 导航: 这里将Nginx的一些配置进行整合。根据导航比较容易找到对应的文档。资料来自于weixueyuan 1.Nginx核心配置详解 2.Nginx HTTP模块 3.Nginx搭建 Web服务 4

[转帖]NGINX的一些SEO优化常用配置

https://www.jianshu.com/p/e55073e5ebc7 官方文档:http://nginx.org/en/docs/ 常用模块: ngx_http_core_module ngx_http_rewrite_module ngx_http_proxy_module ngx_htt

[转帖]Nginx代理获取后端用户真实IP

https://www.cnblogs.com/paul8339/p/15740137.html nginx代理后想获取用户的真实IP, 1.在http 模块内增加map模块参数: map $http_x_forwarded_for $clientRealIp { "" $remote_addr;

[转帖]nginx的map指令

一 ngx_http_map_module模块 1) map 指令是由 'ngx_http_map_module 模块'提供的,默认情况下安装 nginx 都会'安装'该模块. 2) map 的主要作用是'创建自定义变量',通过使用 nginx 的'内置'变量,去'匹配'某些特定规则;如果匹配成功则

[转帖]nginx上传模块—nginx upload module-

https://www.cnblogs.com/lidabo/p/4171515.html 一. nginx upload module原理 官方文档: http://www.grid.net.ru/nginx/upload.en.html Nginx upload module通过nginx服务来

[转帖]记一次压测引起的nginx负载均衡性能调优

https://xiaorui.cc/archives/3495 这边有个性能要求极高的api要上线,这个服务端是golang http模块实现的。在上线之前我们理所当然的要做压力测试。起初是 “小白同学” 起头进行压力测试,但当我看到那压力测试的结果时,我也是逗乐了。 现象是,直接访问Golang

[转帖]Nginx 负载均衡 和 健康检查

https://www.jianshu.com/p/fbb0a81604d9 简介 从 nginx 下载, 到模块安装 关于为什么不使用 ngx_http_upstream_module 测试过 ngx_http_upstream_module 这个模块, 在应用稳定的情况下做做负载均衡还可以. 但