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参数设置为非延迟:

浙公网安备 33010602011771号