nginx 模块

Gzip模块

Gzip模块主要用于对返回给客户端的网页采用gzip进行压缩输出。

目前,90%的浏览器都支持gzip和deflate两种压缩格式。如果浏览器支持gzip压缩,就会在HTTP请求头中发送一行“Accept-Encoding:gzip,deflate”,这时候Nginx服务器可以输出经过gzip压缩后的页面给浏览器,浏览器再解压。这种方式可以将网络线路上传输的大量数据消减60%以上,不仅节省了服务器带宽,同时加速了用户的下载速度和体验。

 

Gzip

语法:gzip on|off

默认值:gzip off

使用环境:http,server,location,if (x) location

该指令用于开启或关闭gzip模块

 

Gzip_buffer

语法:gzip_buffers number size

默认值:gzip_buffers 4 4k/8k

使用环境:http,server,location

设置系统获取几个单位的缓存用于存储gzip的压缩结果数据流。例如4 4k代表以4k为单位,按照原始数据大小以4k为单位的4倍申请内存。4 8k代表以8k为单位,按照原始数据大小以8k为单位的4倍申请内存。

如果没有设置,默认值是申请跟原始数据相同大小的内存空间去存储gzip压缩结果。

 

Gzip_comp_leve

语法:gzip_comp_level 1..9

默认值:zip_comp_level 1

使用环境:http,server,location

gzip压缩比,1压缩比最小处理速度最快,9压缩比最大但处理速度最慢(传输快但比较消耗cpu)。

 

Gzip_min_length

语法:gzip_min_length length

默认值:gzip_min_length 0

使用环境:http,server,location

设置允许压缩的页面最小字节数,页面字节数从header头的Content-Length中进行获取。默认值是0,不管页面多大都压缩。建议设置成大于1k的字节数,小于1k可能会越压越大。即:gzip_min_length 1024。

 

Gzip_http_version

语法:gzip_http_version 1.0|1.1

默认值:gzip_http_version 1.1

使用环境:http,server,location

识别http的协议版本。由于早期的一些浏览器或http客户端,可能不支持gzip自解压,用户就会看到乱码,所以做一些判断还是有必要的1。

 

Gzip_proxied

语法:gzip_proxied[off|expired|no-cache|no-store|private|no_last_modified|no_etag|auth|any]...

默认值:gzip_proxied off

使用环境:http,server,location

Nginx作为反向代理的时候启用,开启或关闭后端服务器返回的结果,匹配的前提是后端服务器必须要返回包含“Via”的header头。

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——无条件启用压缩。

 

HTTP Hearders

add_header

语法:add_header name value

默认值:none

使用环境:http,server,location

当HTTP应答状态码为200、204、301、302或304的时候,增加指定的Header头,其中Header头的值可以使用变量

 

expires

语法:expires[time|epoch|max|off]

默认值:expires off

使用环境:http,server,location

使用本指令可以控制HTTP应答中的“Expires”和“Cache-Control”Header头信息,起到控制浏览器端页面缓存的作用。

可以在time值中使用正数或负数。“Expires”头标的值将通过当前系统时间加上您设定的time值来获得。

epoch指定“Expires”的值为1 January, 1970, 00:00:01 GMT。

max指定“Expires”的值为31 December 2037 23:59:59 GMT,“Cache-Control”的值为10年。

-1指定“Expires”的值为服务器当前时间-1s,即永远过期。

“Cache-Control”头标的值由您指定的时间来决定:

负数:Cache-Control: no-cache。

正数或零:Cache-Control: max-age=#, #为您指定时间的秒数。

“off”表示不修改“Expires”和“Cache-Control”的值。

注意:expires指令同样也只能工作于200、204、301、302或304应答状态。

 

HTTP Index

index

语法:index file-path[file-path[...]];

默认值:no

使用环境:server,location

该指令用来指定做默认文档的文件名,可以在文件名处使用变量。如果您指定了多个文件,那么将按照您指定的顺序逐个查找。可以在列表末尾加上一个绝对路径名的文件。

示例如下:

 

HTTP Referer

valid_referer

语法:valid_referers[none|blocked|server_names]...

默认值:none

使用环境:server,location

该指令会根据Referer Header头的内容分配一个值0或1给变量$invalid_referer。如果Referer Header头不符合valid_referers指令设置的有效Referer,变量$invalid_referer将被设置为1(详情请见代码13-11示例)。

该指令的参数可以为以下内容:

none:表示无Referer值的情况;

blocked:表示Referer值被防火墙进行伪装,例如:“Referer:XXXXXXX”;

server_names:表示一个或多个主机名称。从Nginx 0.5.33版本开始,server_names中可以使用通配符“*”号。

 

HTTP Limit Zone

limit_zone

语法:limit_zone zone_name $variable memory_max_size

默认值:no

使用环境:http

该指令定义了一个数据区,其中记录会话状态信息。$variable定义判断会话的变量;memory_max_size定义内存记录区的总容量。示例如下:

 

在以上示例中,定义一个叫“one”的记录区,总容量为10MB,以变量$binary_remote_addr作为会话的判断基准(即一个地址一个会话)。

您可能注意到了,在这里使用的是$binary_remote_addr而不是$remote_addr。

$remote_addr的长度为7至15 bytes,会话信息的长度为32或64 bytes。而$binary_remote_addr的长度为4 bytes,会话信息的长度为32 bytes。

当记录区的大小为1MB的时候,大约可以记录32000个会话信息(一个会话占用32 bytes)。

 

limit_conn

语法:limit_conn zone_name max_clients_per_ip

默认值:no

使用环境:http,server,location

该指令用于指定一个会话最大的并发连接数。当超过指定的最大并发连接数时,服务器将返回“Service unavailable”(503)。

以上示例中,定义一个叫“one”的记录区,总容量为10MB,以变量$binary_remote_addr作为会话的判断基准(即一个地址一个会话)。限制/download/目录下,一个会话只能进行一个连接。简单来说,就是限制/download/目录下,一个IP只能发起一个连接,多于一个,一律返回“Service unavailable”(503)状态。

 

HTTP Limit Req

limit_req_zone

语法:limit_req_zone $session_variable zone=name_of_zone:size rate=rate

默认值:none

使用环境:http

该指令用于定义一块内存存储区,用来存储Session会话的状态,Session的变量由指定的变量构成,通常可以设置为存储客户端IP的变量$binary_remote_addr。以下是一个示例:

 

在本例中,为Session会话状态分配了一个名为one的10MB内存存储区,限制了每秒只接受一个IP的一次请求(1 Request/Sec)。这里使用变量$binary_remote_addr代替$remote_addr,可以为每个会话减少64字节的内存存储空间,从而使得1MB内存可以存储大概16000个会话状态。

速度限制的条件可以设置为“请求数/秒(r/s)”或“请求数/分钟(r/m)”,比率必须为整型数,如果你要设置少于每秒1个请求数的值,例如“1个请求/2秒”,你应该设置为“30r/m”。

 

limit_req

语法:limit_req zone=zone burst=burst[nodelay]

默认值:none

使用环境:http,server,location

该指令用于指定使用的内存存储区(zone)名称,以及最大的突发请求数(burse)。如果请求的速率超过limit_req_zone指令中设置的速率,这些请求将被延迟处理,以便能够按照limit_req_zone指令中设定的速度处理请求。多余的请求将被延迟处理,直到这些请求的数量不超过burst参数中规定的数量。在这种情况下,请求将获得服务不可用信息:“Service unavailable”(503错误代码)。Burst的值默认为0。

示例如下:

 

在该示例中,允许一个用户平均每秒不超过1个请求,同时处理的查询数量最多不超过5个。如果查询数小于burst值,延迟不是必须的,你可以使用nodelay参数设置为非延迟:

 

 

 

 

posted @ 2022-08-09 14:03  平安里  阅读(76)  评论(0)    收藏  举报