Nginx模块之http.md

时间:2024-01-01 12:28:03

ngx_http_access_module

ngx_http_access_module模块允许限制对某些客户端地址的访问。
访问也可以通过密码,子请求的结果或JWT来限制。 通过地址和密码的同时访问限制由满足指令控制。

allow

Syntax: allow address | CIDR | unix: | all;
Default: —
Context: http, server, location, limit_except

允许访问指定的网络或地址。

deny

Syntax: deny address | CIDR | unix: | all;
Default: —
Context: http, server, location, limit_except

拒绝指定网络或地址的访问。

ngx_http_addition_module

ngx_http_addition_module模块是一个在响应之前和之后添加文本的过滤器。 此模块不是默认构建的,应使用--with-http_addition_module配置参数启用。
详细参考

ngx_http_auth_basic_module

ngx_http_auth_basic_module模块允许通过使用“HTTP Basic Authentication”协议验证用户名和密码来限制对资源的访问。
访问也可以由地址,子请求的结果或JWT限制。 通过地址和密码的同时访问限制由满足指令控制。

auth_basic

Syntax: auth_basic string | off;
Default: auth_basic off;
Context: http, server, location, limit_except

启用使用“HTTP Basic Authentication”协议验证用户名和密码。 指定的参数用作领域。 参数值可以包含变量(1.3.10,1.2.7)。 特殊值off允许取消从先前配置级别继承的auth_basic指令的影响。

auth_basic_user_file

Syntax: auth_basic_user_file file;
Default: —
Context: http, server, location, limit_except

指定验证的用户名和密码的文件,格式如下:

# comment
name1:password1
name2:password2:comment
name3:password3

文件名可以包含变量。
支持以下密码类型:

  • 用crypt()函数加密; 可以使用来自Apache HTTP Server分发或“openssl passwd”命令的“htpasswd”实用程序生成;

  • 散列与基于MD5的密码算法(apr1)的Apache变体; 可以用相同的工具生成;

  • 由RFC 2307中描述的“{scheme} data”语法(1.0.3+)指定;
    当前实现的方案包括PLAIN(不应使用示例一),SHA(1.3.13)(不应使用纯SHA-1哈希)和SSHA(盐化SHA-1哈希,由某些软件包使用,特别是 OpenLDAP和Dovecot)。

ngx_http_auth_jwt_module

ngx_http_auth_jwt_module模块(1.11.3)通过使用指定的键验证提供的JSON Web令牌(JWT)来实现客户端授权。 JWT声明必须以JSON Web签名(JWS)结构编码。 该模块可用于OpenID Connect身份验证。
详细参考

ngx_http_auth_request_module

ngx_http_auth_request_module模块(1.5.4+)根据子请求的结果实现客户端授权。 如果子请求返回2xx响应代码,则允许访问。 如果它返回401或403,则拒绝访问相应的错误代码。 子请求返回的任何其他响应代码被视为错误。
对于401错误,客户端还从子请求响应报文接收“WWW-Authenticate” header。
此模块不是默认构建的,应使用--with-http_auth_request_module配置参数启用。
模块可以与其他访问模块组合,例如ngx_http_access_module,ngx_http_auth_basic_module和ngx_http_auth_jwt_module,通过allocate指令。

Notes:在版本1.7.3之前,无法缓存对授权子请求的响应(使用proxy_cache,proxy_store等)。

auth_request

Syntax: auth_request uri | off;
Default: auth_request off;
Context: http, server, location

根据子请求的结果启用授权,并设置子请求将发送到的URI。

auth_request_set

Syntax: auth_request_set variable value;
Default: —
Context: http, server, location

在授权请求完成后,将请求变量设置为给定值。 该值可以包含授权请求的变量,例如$ upstream_http_ *。

ngx_http_autoindex_module

ngx_http_autoindex_module模块处理以斜杠字符('/')结尾的请求,并生成目录列表。 通常,当ngx_http_index_module模块找不到索引文件时,会将请求传递给ngx_http_autoindex_module模块。

autoindex

Syntax: autoindex on | off;
Default: autoindex off;
Context: http, server, location

启用或禁用目录列表输出。

autoindex_exact_size

Syntax: autoindex_exact_size on | off;
Default: autoindex_exact_size on;
Context: http, server, location

对于HTML格式,指定是否应在目录列表中输出确切的文件大小,或者将其四舍五入到千字节,兆字节和千兆字节。

autoindex_format

Syntax: autoindex_format html | xml | json | jsonp;
Default: autoindex_format html;
Context: http, server, location
This directive appeared in version 1.7.9.

设置目录列表的格式。当使用JSONP格式时,回调函数的名称使用回调请求参数设置。 如果参数丢失或有一个空值,则使用JSON格式。
可以使用ngx_http_xslt_module模块转换XML输出。

autoindex_localtime

Syntax: autoindex_localtime on | off;
Default: autoindex_localtime off;
Context: http, server, location

对于HTML格式,指定是否应以本地时区或UTC输出目录列表中的时间。

ngx_http_browser_module

ngx_http_browser_module模块创建的变量的值取决于“User-Agent”请求头字段的值:

  • $modern_browser:等于modern_browser_value指令设置的值,如果浏览器被标识为modern_browser_value;

  • $ancient_browser:等于由ancient_browser_value伪指令设置的值,如果浏览器被标识为ancient_browser_value;

  • $msie:如果浏览器被标识为任何版本的MSIE,则等于“1”。

ancient_browser

Syntax: ancient_browser string ...;
Default: —
Context: http, server, location

如果在“User-Agent”请求标头字段中找到任何指定的子字符串,则浏览器将被视为古代。 特殊字符串“netscape4”对应于正则表达式“^ Mozilla / [1-4]”。

ancient_browser_value

Syntax: ancient_browser_value string;
Default: ancient_browser_value 1;
Context: http, server, location

设置$ ancient_browser变量的值。

modern_browser

Syntax: modern_browser browser version;
modern_browser unlisted;
Default: —
Context: http, server, location

指定浏览器被视为现代的版本。 浏览器可以是以下任何一种:msie,gecko(基于Mozilla的浏览器),opera,safari或konqueror。
版本可以指定以下格式:X,X.X,X.X.X或X.X.X.X. 每种格式的最大值分别为4000,4000.99,4000.99.99和4000.99.99.99。
特殊值unlisted指定将浏览器视为现代的,如果它没有被modern_browser和ancient_browser指令列出。 否则这样的浏览器被认为是古老的。 如果请求未在标头中提供“User-Agent”字段,则浏览器被视为未列出。

modern_browser_value

Syntax: modern_browser_value string;
Default: modern_browser_value 1;
Context: http, server, location

为$ modern_browser变量设置值。

ngx_http_dav_module

ngx_http_dav_module模块用于通过WebDAV协议进行文件管理自动化。 模块处理HTTP和WebDAV方法PUT,DELETE,MKCOL,COPY和MOVE。
此模块不是默认构建的,应使用--with-http_dav_module配置参数启用。
详细参考

ngx_http_empty_gif_module

ngx_http_empty_gif_module模块会发出单像素透明GIF。
详细参考

ngx_http_f4f_module

ngx_http_f4f_module模块为Adobe HTTP动态流(HDS)提供服务器端支持。
详细参考

ngx_http_flv_module

ngx_http_flv_module模块为Flash视频(FLV)文件提供虚拟流服务器端支持。
它通过发送从请求的字节偏移开始的文件的内容和前置的FLV头部,特别地处理请求URI的查询字符串中的具有开始参数的请求。
此模块不是默认构建的,应使用--with-http_flv_module配置参数启用。
详细参考

ngx_http_geo_module

ngx_http_geo_module模块根据客户端IP地址创建具有值的变量。
详细参考

ngx_http_geoip_module

ngx_http_geoip_module模块(0.8.6+)使用预编译的MaxMind数据库创建具有取决于客户端IP地址的值的变量。
当使用具有IPv6支持的数据库(1.3.12,1.2.7)时,IPv4地址将被查找为IPv4映射的IPv6地址。
此模块不是默认构建的,应使用--with-http_geoip_module配置参数启用。
此模块需要MaxMind GeoIP库。
详细参考

ngx_http_gunzip_module

ngx_http_gunzip_module模块是一个过滤器,用于对不支持“gzip”编码方法的客户端使用“Content-Encoding:gzip”解压缩响应。 当希望存储压缩的数据以节省空间并降低I / O成本时,该模块将是有用的。
此模块不是默认构建的,应使用--with-http_gunzip_module配置参数启用。

gunzip

Syntax: gunzip on | off;
Default: gunzip off;
Context: http, server, location

为缺少gzip支持的客户端启用或禁用解压缩gzipped响应。 如果启用,则在确定客户端是否支持gzip时也会考虑以下指令:gzip_http_version,gzip_proxied和gzip_disable。 另请参阅gzip_vary指令。

gunzip_buffers

Syntax: gunzip_buffers number size;
Default: gunzip_buffers 32 4k|16 8k;
Context: http, server, location

设置用于解压缩响应的缓冲区的数量和大小。 默认情况下,缓冲区大小等于一个内存页。 这是4K或8K,取决于平台。

ngx_http_gzip_module

ngx_http_gzip_module模块是一个使用“gzip”方法压缩响应的过滤器。 这通常有助于将传输数据的大小减少一半或更多。

gzip

Syntax: gzip on | off;
Default: gzip off;
Context: http, server, location, if in location

启用或停用响应的压缩。

gzip_buffers

Syntax: gzip_buffers number size;
Default: gzip_buffers 32 4k|16 8k;
Context: http, server, location

设置用于压缩响应的缓冲区的数量和大小。 默认情况下,缓冲区大小等于一个内存页。 这是4K或8K,取决于平台。
直到版本0.7.28,默认情况下使用四个4K或8K缓冲区。

gzip_comp_level

Syntax: gzip_comp_level level;
Default: gzip_comp_level 1;
Context: http, server, location

设置响应的gzip压缩级别。 可接受的值介于1到9之间。

gzip_disable

Syntax: gzip_disable regex ...;
Default: —
Context: http, server, location
This directive appeared in version 0.6.23.

禁用对“User-Agent”标头字段与任何指定的正则表达式匹配的请求的响应进行gzipping。

gzip_min_length

Syntax: gzip_min_length length;
Default: gzip_min_length 20;
Context: http, server, location

设置将被gzip压缩的响应的最小长度。 长度仅根据“Content-Length”响应头字段确定。

gzip_http_version

Syntax: gzip_http_version 1.0 | 1.1;
Default: gzip_http_version 1.1;
Context: http, server, location

设置压缩响应所需的请求的最小HTTP版本。

gzip_proxied

Syntax: gzip_proxied off | expired | no-cache | no-store | private | no_last_modified | no_etag | auth | any ...;
Default: gzip_proxied off;
Context: http, server, location

根据请求和响应启用或禁用代理请求的响应的gzipping。 请求被代理的事实由“Via”请求头字段的存在来确定。 该伪指令接受多个参数:

  • off:禁用所有代理请求的压缩,忽略其他参数;

  • expired:如果响应头包括具有禁用缓存的值的“Expires”字段,则启用压缩;

  • no-cache:如果响应头包括具有“no-cache”参数的“Cache-Control”字段,则启用压缩;

  • no-store:如果响应头包括具有“no-store”参数的“Cache-Control”字段,则启用压缩;

  • private:如果响应头包括具有“private”参数的“Cache-Control”字段,则启用压缩;

  • no_last_modified:如果响应头不包括“Last-Modified”字段,则启用压缩;

  • no_etag:如果响应报头不包括“ETag”字段,则启用压缩;

  • auth:如果请求头包括“授权”字段则启用压缩;

  • any:启用对所有代理请求的压缩。

gzip_types

Syntax: gzip_types mime-type ...;
Default: gzip_types text/html;
Context: http, server, location

除了“text / html”之外,还允许为指定的MIME类型应用“gzipping”响应。 特殊值“*”匹配任何MIME类型(0.8.29)。 对“text / html”类型的响应总是压缩。

gzip_vary

Syntax: gzip_vary on | off;
Default: gzip_vary off;
Context: http, server, location

如果指令gzip,gzip_static或gunzip处于活动状态,则启用或禁用插入“Vary:Accept-Encoding”响应头字段。

ngx_http_gzip_static_module

ngx_http_gzip_static_module模块允许发送带有“.gz”文件扩展名的预压缩文件,而不是常规文件。
此模块不是默认构建的,应使用--with-http_gzip_static_module配置参数启用。

gzip_static

Syntax: gzip_static on | off | always;
Default: gzip_static off;
Context: http, server, location

启用(“on”)或禁用(“off”)检查预压缩文件的存在。 还会考虑以下指令:gzip_http_version,gzip_proxied,gzip_disable和gzip_vary。
使用“always”值(1.3.6),在所有情况下都使用gzipped文件,而不检查客户端是否支持它。 如果磁盘上没有任何未压缩的文件或者使用ngx_http_gunzip_module,这很有用。
可以使用gzip命令或任何其他兼容文件压缩文件。 建议原始文件和压缩文件的修改日期和时间相同。

ngx_http_headers_module

ngx_http_headers_module模块允许将“Expires”和“Cache-Control”报头字段和任意字段添加到响应标头。

add_header

Syntax: add_header name value [always];
Default: —
Context: http, server, location, if in location

如果响应代码等于200,201,204,206,301,302,303,304或307,则将指定的字段添加到响应头中。值可以包含变量。
如果指定了always参数(1.7.5),则将添加头字段,而不考虑响应代码。

expires

Syntax: expires [modified] time;
expires epoch | max | off;
Default: expires off;
Context: http, server, location, if in location

如果响应代码等于200,201,204,206,301,302,303,304或307,则启用或禁用添加或修改“Expires”和“Cache-Control”响应头字段。参数可以是正值 或负时间。

“Expires”字段中的时间计算为指令中指定的当前时间和时间的总和。 如果使用修改的参数(0.7.0,0.6.32),则时间计算为文件的修改时间和指令中指定的时间之和。

此外,可以使用“@”前缀(0.7.9,0.6.34)指定一天中的时间:expires @15h30m;
时间参数对应于绝对时间“Thu,1970年1月1日00:00:01 GMT”。 “Cache-Control”字段的内容取决于指定时间的符号:

  • 时间为负 - “Cache-Control: no-cache”。

  • 时间为正或零 - “Cache-Control:max-age = t”,其中t是指令中指定的时间,以秒为单位。

max参数将“Expires”设置为值“Thu,2037年12月31日23:55:55 GMT”,“Cache-Control”设置为10年。
off参数禁用添加或修改“Expires”和“Cache-Control”响应头字段。
最后一个参数值可以包含变量(1.7.9):

ngx_http_image_filter_module

ngx_http_image_filter_module模块(0.7.54+)是一个以JPEG,GIF,PNG和WebP格式转换图像的过滤器。
此模块不是默认构建的,应使用--with-http_image_filter_module配置参数启用。
此模块使用libgd库。 建议使用库的最新可用版本。
WebP格式支持出现在1.11.6版本中。 要以此格式转换映像,libgd库必须使用WebP支持进行编译。

image_filter

Syntax: image_filter off;
image_filter test;
image_filter size;
image_filter rotate 90 | 180 | 270;
image_filter resize width height;
image_filter crop width height;
Default:
image_filter off;
Context: location

设置要在图像上执行的转换类型:

  • off:关闭周围位置的模块处理。

  • test:确保响应是JPEG,GIF,PNG或WebP格式的图像。 否则,将返回415(不支持的介质类型)错误。

  • size:以JSON格式输出关于图像的信息。

  • rotate 90|180|270:逆时针旋转图像指定的度数。 参数值可以包含变量。 此模式可以单独使用,也可以与调整大小和裁剪变换一起使用。

  • resize width height:按比例将图像缩小到指定的大小。 要只缩小一个维度,可以将另一个维度指定为“ - ”。 如果出现错误,服务器将返回代码415(不支持的介质类型)。 参数值可以包含变量。 与rotate参数一起使用时,旋转在缩小后进行。

  • crop width height:成比例地将图像缩小到较大的边尺寸,并且由另一边修剪外部边缘。 要只缩小一个维度,可以将另一个维度指定为“ - ”。 如果出现错误,服务器将返回代码415(不支持的介质类型)。 参数值可以包含变量。 与rotate参数一起使用时,旋转在缩小之前进行。

image_filter_buffer

Syntax: image_filter_buffer size;
Default: image_filter_buffer 1M;
Context: http, server, location

设置用于读取图像的缓冲区的最大大小。 当超过大小时,服务器返回错误415(不支持的介质类型)。

image_filter_interlace

Syntax: image_filter_interlace on | off;
Default: image_filter_interlace off;
Context: http, server, location
This directive appeared in version 1.3.15.

如果启用,最终图像将被隔行扫描。 对于JPEG,最终图像将采用“progressive JPEG”格式。

image_filter_jpeg_quality

Syntax: image_filter_jpeg_quality quality;
Default: image_filter_jpeg_quality 75;
Context: http, server, location

设置所转换的JPEG图像的所需质量。 可接受的值在1到100的范围内。较小的值通常意味着较低的图像质量和较少的要传输的数据。 最大推荐值为95.参数值可以包含变量。

image_filter_sharpen

Syntax: image_filter_sharpen percent;
Default: image_filter_sharpen 0;
Context: http, server, location

提高最终图像的清晰度。 锐度百分比可以超过100.零值禁用锐化。 参数值可以包含变量。

image_filter_transparency

Syntax: image_filter_transparency on|off;
Default: image_filter_transparency on;
Context: http, server, location

定义在使用调色板指定的颜色转换GIF图像或PNG图像时是否应保留透明度。 透明度的损失导致更好质量的图像。 PNG中的Alpha通道透明度始终保留。

image_filter_webp_quality

Syntax: image_filter_webp_quality quality;
Default: image_filter_webp_quality 80;
Context: http, server, location
This directive appeared in version 1.11.6.

设置变换的WebP图像的所需质量。 可接受的值在1到100的范围内。较小的值通常意味着较低的图像质量和较少的要传输的数据。 参数值可以包含变量。

ngx_http_index_module

ngx_http_index_module模块处理以斜杠字符('/')结尾的请求。 这些请求也可以由ngx_http_autoindex_module和ngx_http_random_index_module模块处理。

index

Syntax: index file ...;
Default: index index.html;
Context: http, server, location

定义将用作索引的文件。 文件名可以包含变量。 将按指定的顺序检查文件。 列表的最后一个元素可以是具有绝对路径的文件。

ngx_http_js_module

ngx_http_js_module模块用于在nginScript中实现位置和变量处理程序 - JavaScript语言的一个子集。
此模块不是默认构建的,应使用nginScript模块使用--add_module配置参数进行编译:

./configure --add-module=path-to-njs/nginx

Notes:模块是实验性的,注意适用。
详细参考

ngx_http_limit_conn_module

ngx_http_limit_conn_module模块用于限制每个定义的键的连接数,特别是来自单个IP地址的连接数。
并非所有连接都被计数。 只有当连接具有由服务器处理的请求并且整个请求头已经被读取时,才对连接进行计数。

limit_conn

Syntax: limit_conn zone number;
Default: —
Context: http, server, location

设置共享内存区域和给定键值的最大允许连接数。 当超出此限制时,服务器将返回503(服务临时不可用)错误以回复请求。 例如,指令每次只允许每个IP地址一个连接。

limit_conn_zone $binary_remote_addr zone=addr:10m;

server {
location /download/ {
limit_conn addr 1;
}

Notes:在HTTP / 2和SPDY中,每个并发请求被认为是单独的连接。

可能有几个limit_conn指令。 例如,以下配置将限制每个客户端IP与服务器的连接数,同时限制与虚拟服务器的连接总数:

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;
}

当且仅当当前级别上没有limit_conn指令时,这些指令才继承上一级。

limit_conn_log_level

Syntax: limit_conn_log_level info | notice | warn | error;
Default: limit_conn_log_level error;
Context: http, server, location
This directive appeared in version 0.8.18.

设置服务器限制连接数时所需的日志记录级别。

limit_conn_status

Syntax: limit_conn_status code;
Default: limit_conn_status 503;
Context: http, server, location
This directive appeared in version 1.3.15.

设置要响应拒绝的请求返回的状态代码。

limit_conn_zone

Syntax: limit_conn_zone key zone=name:size;
Default: —
Context: http

设置将保持各种键的状态的共享内存区域的参数。特别地,该状态包括当前连接数。键可以包含文本,变量及其组合。不计入具有空键值的请求。
Notes:在版本1.7.6之前,键可以只包含一个变量。

用法示例:

limit_conn_zone $binary_remote_addr zone=addr:10m;

这里,客户端IP地址用作密钥。注意,不是$ remote_addr,这里使用$ binary_remote_addr变量。 $ remote_addr变量的大小可以从7到15个字节。存储状态在32位平台上占用32或64字节的内存,在64位平台上始终占用64字节。 $ binary_remote_addr变量的大小对于IPv4地址始终为4字节,对于IPv6地址为16字节。存储状态在32位平台上始终占用32或64字节,在64位平台上始终占64字节。一兆字节区域可以保持大约32000个32字节状态或大约16000个64字节状态。如果区域存储已用尽,服务器将向所有后续请求返回503(临时不可用服务)错误。

ngx_http_limit_req_module

ngx_http_limit_req_module模块(0.7.21)用于限制每个定义的键的请求处理速率,特别是来自单个IP地址的请求的处理速率。 使用“leaky bucket”方法进行限制。

limit_req

Syntax: limit_req zone=name [burst=number] [nodelay];
Default: —
Context: http, server, location

设置共享内存区域和请求的最大突发大小。 如果请求速率超过为区域配置的速率,则它们的处理被延迟,使得以定义的速率处理请求。 过多的请求被延迟,直到它们的数量超过最大突发大小,在这种情况下,请求以错误503(服务临时不可用)结束。 默认情况下,最大突发大小等于零。 例如,指令允许平均每秒不超过1个请求,突发不超过5个请求。

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

server {
location /search/ {
limit_req zone=one burst=5;
}

如果不希望在请求受限时延迟过多的请求,则应使用参数nodelay:

limit_req zone=one burst=5 nodelay;

可能有几个limit_req指令。 例如,以下配置将限制来自单个IP地址的请求的处理速率,同时限制虚拟服务器的请求处理速率:

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;
}

当且仅当在当前级别上没有limit_req指令时,这些指令从上一级继承。

limit_req_log_level

Syntax: limit_req_log_level info | notice | warn | error;
Default: limit_req_log_level error;
Context: http, server, location
This directive appeared in version 0.8.18.

为服务器由于速率超过或拒绝请求处理而拒绝处理请求的情况设置所需的日志记录级别。 延迟的日志级别比拒绝的日志级别低一个点; 例如,如果指定了“limit_req_log_level notice”,则会使用信息级别记录延迟。

limit_req_status

Syntax: limit_req_status code;
Default:
limit_req_status 503;
Context: http, server, location
This directive appeared in version 1.3.15.

设置要响应拒绝的请求返回的状态代码。

limit_req_zone

Syntax: limit_req_zone key zone=name:size rate=rate;
Default: —
Context: http

设置将保持各种键的状态的共享内存区域的参数。 特别地,该状态存储当前的过多请求数。 键可以包含文本,变量及其组合。 不计入具有空键值的请求。
Notes:在版本1.7.6之前,键可以只包含一个变量。
用法示例:

limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;

这里,状态保持在10兆字节的区域“1”中,并且该区域的平均请求处理速率不能超过每秒1个请求。
客户端IP地址用作密钥。注意,不是$ remote_addr,这里使用$ binary_remote_addr变量。 $ binary_remote_addr变量的大小对于IPv4地址始终为4字节,对于IPv6地址为16字节。存储状态在32位平台上始终占用64个字节,在64位平台上始终占128个字节。一兆字节区域可以保持大约16,000个64字节状态或大约8千128个字节的状态。如果区域存储已用尽,服务器将向所有后续请求返回503(临时不可用服务)错误。
速率在每秒请求数(r / s)中指定。如果需要每秒小于一个请求的速率,则在每分钟请求中指定(r / m)。例如,每秒半请求为30r / m。

ngx_http_map_module

ngx_http_map_module模块创建变量的值取决于其他变量的值。
详细参考

ngx_http_memcached_module

ngx_http_memcached_module模块用于从memcached服务器获取响应。 键在$ memcached_key变量中设置。 应该通过nginx外部的方式预先将响应放在memcached中。
详细参考

ngx_http_mp4_module

ngx_http_mp4_module模块为MP4文件提供伪流式服务器端支持。 此类文件通常具有.mp4,.m4v或.m4a文件扩展名。
详细参考

ngx_http_perl_module

ngx_http_perl_module模块用于在Perl中实现位置和变量处理程序,并将Perl调用插入到SSI中。
此模块不是默认构建的,应使用--with-http_perl_module配置参数启用。
Notes:此模块需要Perl版本5.6.1或更高版本。 C编译器应该与用于构建Perl的编译器兼容。
详细参考

ngx_http_random_index_module

ngx_http_random_index_module模块处理以斜杠字符('/')结尾的请求,并选择目录中的随机文件作为索引文件。 模块在ngx_http_index_module模块之前处理。
此模块不是默认构建的,应使用--with-http_random_index_module配置参数启用。

random_index

Syntax: random_index on | off;
Default: random_index off;
Context: location

启用或禁用周围位置中的模块处理。

ngx_http_realip_module

ngx_http_realip_module模块用于将客户端地址和可选端口更改为在指定的头字段中发送的端口。
此模块不是默认构建的,应使用--with-http_realip_module配置参数启用。

set_real_ip_from

Syntax: set_real_ip_from address | CIDR | unix:;
Default: —
Context: http, server, location

定义已知可发送正确替换地址的可信地址。 如果指定特殊值unix:,则所有UNIX域套接字都将受信任。

从版本1.3.0和1.2.1开始支持IPv6地址。

real_ip_header

Syntax: real_ip_header field | X-Real-IP | X-Forwarded-For | proxy_protocol;
Default: real_ip_header X-Real-IP;
Context: http, server, location

定义请求标头字段,其值将用于替换客户端地址。
X-Real-IP和X-Forwarded-For参数可能包含可选端口(1.11.0)。 地址和端口应根据RFC 3986指定。
proxy_protocol参数(1.5.12)将客户端地址更改为PROXY协议头中的地址。 必须先通过在listen指令中设置proxy_protocol参数来启用PROXY协议。

real_ip_recursive

Syntax: real_ip_recursive on | off;
Default: real_ip_recursive off;
Context: http, server, location
This directive appeared in versions 1.3.0 and 1.2.1.

如果禁用递归搜索,则匹配其中一个受信任地址的原始客户端地址将被real_ip_header指令定义的请求标头字段中发送的最后一个地址替换。 如果启用递归搜索,则匹配其中一个受信任地址的原始客户端地址将替换为请求标头字段中发送的最后一个非受信任地址。

ngx_http_referer_module

ngx_http_referer_module模块用于阻止对“Referer”头字段中具有无效值的请求对站点的访问。 应该记住,使用适当的“Referer”字段值来构造请求是非常容易的,因此该模块的预期目的不是彻底阻止这种请求,而是阻止普通浏览器发送的请求的大量流动。 还应该考虑到,即使对于有效的请求,常规浏览器也可能不发送“Referer”字段。

referer_hash_bucket_size

Syntax: referer_hash_bucket_size size;
Default: referer_hash_bucket_size 64;
Context: server, location
This directive appeared in version 1.0.5.

设置有效的查阅器哈希表的bucket大小。

referer_hash_max_size

Syntax: referer_hash_max_size size;
Default: referer_hash_max_size 2048;
Context: server, location
This directive appeared in version 1.0.5.

设置有效的查阅器哈希表的最大大小。

valid_referers

Syntax: valid_referers none | blocked | server_names | string ...;
Default: —
Context: server, location

指定“Referer”请求头字段值,这将导致嵌入的$ invalid_referer变量设置为空字符串。 否则,变量将设置为“1”。 搜索匹配项不区分大小写。

参数可以如下:

  • none:请求头中缺少“Referer”字段;

  • blocked:“请求”字段存在于请求标头中,但其值已被防火墙或代理服务器删除; 这样的值是不以“http://”或“https://”开头的字符串;

  • server_names:“Referer”请求头字段包含服务器名称之一;

  • arbitrary string:定义服务器名称和可选的URI前缀。 服务器名称的开头或结尾可以有“*”。 在检查期间,“Referer”字段中的服务器端口被忽略;

  • regular expression:第一个符号应该是一个“〜”。 应当注意,表达式将与在“http://”或“https://”之后开始的文本匹配。

举例:

valid_referers none blocked server_names
*.example.com example.* www.example.org/galleries/
~\.google\.;

内置变量:$invalid_referer(所有不能符合valid_referer指定定义的引用请求均为不合法引用)

ngx_http_rewrite_module

ngx_http_rewrite_module模块用于使用PCRE正则表达式更改请求URI,返回重定向并有条件地选择配置。
ngx_http_rewrite_module模块伪指令按以下顺序处理:

  • 在服务器级别上指定的此模块的指令顺序执行;

  • 反复:

    • 基于请求URI搜索位置;

    • 在所找到的位置内指定的该模块的指令被顺序地执行;

    • 如果请求URI被重写,则循环被重复,但不超过10次。

break

Syntax: break;
Default: —
Context: server, location, if

停止处理当前的ngx_http_rewrite_module伪指令集。

如果在位置内指定了指令,则在该位置继续进行请求的进一步处理。
例如:

if ($slow) {
limit_rate 10k;
break;
}

if

Syntax: if (condition) { ... }
Default: —
Context: server, location

评估指定的条件。 如果为true,那么在大括号中指定的模块指令将被执行,并且请求被分配在if指令内部的配置。 if指令内的配置继承自先前的配置级别。

条件可以是以下任何一种:

  • 变量名;如果变量的值为空字符串或“0”,则为false;
    在版本1.0.1之前,以“0”开头的任何字符串被视为false值。

  • 使用“=”和“!=”运算符将变量与字符串进行比较;

  • 使用“〜”(区分大小写匹配)和“〜”(区分大小写匹配)运算符匹配正则表达式。正则表达式可以包含可供以后在$ 1 .. $ 9变量中重用的捕获。负运算符“!〜”和“!〜”也可用。如果正则表达式包含“}”或“;”字符,则整个表达式应用单引号或双引号括起来。

  • 使用“-f”和“!-f”运算符检查文件存在;

  • 使用“-d”和“!-d”运算符检查目录存在;

  • 使用“-e”和“!-e”运算符检查文件,目录或符号链接是否存在;

  • 使用“-x”和“!-x”运算符检查可执行文件。

举例:

if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/$1 break;
} if ($http_cookie ~* "id=([^;]+)(?:;|$)") {
set $id $1;
} if ($request_method = POST) {
return 405;
} if ($slow) {
limit_rate 10k;
} if ($invalid_referer) {
return 403;
}

$ invalid_referer嵌入式变量的值由valid_referers指令设置。

return

Syntax: return code [text];
return code URL;
return URL;
Default: —
Context: server, location, if

停止处理并将指定的代码返回给客户端。 非标准代码444关闭连接而不发送响应报头。

从版本0.8.42开始,可以指定重定向URL(代码301,302,303和307)或响应正文文本(对于其他代码)。 响应正文文本和重定向网址可以包含变量。 作为特殊情况,可以将重定向URL指定为此服务器的本地URI,在这种情况下,根据请求方案($ scheme)和server_name_in_redirect和port_in_redirect伪指令形成完全重定向URL。

此外,可以将用于利用代码302的临时重定向的URL指定为唯一的参数。 此类参数应以“http://”,“https://”或“$ scheme”字符串开头。 URL可以包含变量。

rewrite

Syntax: rewrite regex replacement [flag];
Default: —
Context: server, location, if

如果指定的正则表达式匹配请求URI,那么将按照替换字符串中指定的方式更改URI。 重写指令按照它们在配置文件中的出现顺序执行。 可以使用标志来终止指令的进一步处理。 如果替换字符串以“http://”,“https://”或“$ scheme”开头,则处理停止,并将重定向返回给客户端。

可选的标志参数可以是下列之一:

  • last:停止处理当前的ngx_http_rewrite_module指令集,并开始搜索与更改的URI匹配的新位置;

  • break:停止处理当前的ngx_http_rewrite_module指令集,如同break指令一样;

  • redirect:返回具有302代码的临时重定向; 如果替换字符串不以“http://”,“https://”或“$ scheme”开头,则使用;

  • permanent:返回301代码的永久重定向。

完全重定向URL根据请求方案($ scheme)和server_name_in_redirect和port_in_redirect伪指令形成。

例:

server {
...
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 last;
rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra last;
return 403;
...
}

但是,如果这些指令放在“/ download /”位置,最后一个标志应该被替换,否则nginx将使10个周期并返回500错误:

location /download/ {
rewrite ^(/download/.*)/media/(.*)\..*$ $1/mp3/$2.mp3 break;
rewrite ^(/download/.*)/audio/(.*)\..*$ $1/mp3/$2.ra break;
return 403;
}

如果替换字符串包括新的请求参数,则在它们之后附加先前的请求参数。 如果这是不希望的,则在替换字符串的末尾放置一个问号,避免附加它们,例如:

rewrite ^/users/(.*)$ /show?user=$1? last;

如果正则表达式包含“}”或“;”字符,则整个表达式应用单引号或双引号括起来。

rewrite_log

Syntax: rewrite_log on | off;
Default: rewrite_log off;
Context: http, server, location, if

启用或禁用将ngx_http_rewrite_module模块伪指令的处理结果记录到通知级别的error_log。

set

Syntax: set $variable value;
Default: —
Context: server, location, if

设置指定变量的值。 该值可以包含文本,变量及其组合。

uninitialized_variable_warn

Syntax: uninitialized_variable_warn on | off;
Default: uninitialized_variable_warn on;
Context: http, server, location, if

控制是否记录警告未初始化的变量。

ngx_http_scgi_module

ngx_http_scgi_module模块允许将请求传递到SCGI服务器。
详细参考

ngx_http_secure_link_module

ngx_http_secure_link_module模块(0.7.18)用于检查请求的链接的真实性,保护资源免受未经授权的访问,并限制链接的生存期。

通过将请求中传递的校验和值与为请求计算的值进行比较来验证所请求链接的真实性。 如果链接的生命周期有限,且时间已过期,则认为链接已过期。 这些检查的状态在$ secure_link变量中可用。

该模块提供两种替代操作模式。 第一种模式由secure_link_secret伪指令启用,用于检查所请求链路的真实性以及保护资源免受未经授权的访问。 第二种模式(0.8.50)由secure_link和secure_link_md5指令启用,也用于限制链路的生存期。

此模块不是默认构建的,应使用--with-http_secure_link_module配置参数启用。
详细参考

ngx_http_session_log_module

ngx_http_session_log_module模块启用日志记录会话(即多个HTTP请求的聚合),而不是单个HTTP请求。
详细参考
此模块可作为我们商业订阅的一部分。

ngx_http_slice_module

ngx_http_slice_module模块(1.9.8)是一个将请求拆分为子请求的过滤器,每个返回一定范围的响应。 过滤器提供更有效的缓存大响应。

此模块不是默认构建的,应使用--with-http_slice_module配置参数启用。
详细参考

ngx_http_split_clients_module

ngx_http_split_clients_module模块创建适合A / B测试的变量,也称为拆分测试。

split_clients

Syntax: split_clients string $variable { ... }
Default: —
Context: http

创建A / B测试的变量,例如:

split_clients "${remote_addr}AAA" $variant {
0.5% .one;
2.0% .two;
* "";
}

原始字符串的值使用MurmurHash2进行散列。 在给定的示例中,从0到21474835(0.5%)的散列值对应于$ variant变量的值“.one”,从21474836到107374180(2%)的散列值对应于值“.two” 值107374181到4294967295对应于值“”(一个空字符串)。

ngx_http_ssi_module

ngx_http_ssi_module模块是一个过滤器,用于处理通过它的响应中的SSI(服务器端包含)命令。 目前,支持的SSI命令列表不完整。
详细参考

ngx_http_ssl_module

ngx_http_ssl_module模块为HTTPS提供必要的支持。

此模块不是默认构建的,应使用--with-http_ssl_module配置参数启用。
此为了减少处理器负载,建议

  • 设置工作进程数等于处理器数,

  • 启用保持活动连接,

  • 启用共享会话缓存,

  • 禁用内置会话缓存,

  • 并可能增加会话生存期(默认为5分钟):

worker_processes auto;

http {

    ...

    server {
listen 443 ssl;
keepalive_timeout 70; ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
ssl_certificate /usr/local/nginx/conf/cert.pem;
ssl_certificate_key /usr/local/nginx/conf/cert.key;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m; ...
}

ssl

Syntax: ssl on | off;
Default: ssl off;
Context: http, server

为给定的虚拟服务器启用HTTPS协议。
Notes:建议使用listen指令的ssl参数,而不是此指令。

ssl_buffer_size

Syntax: ssl_buffer_size size;
Default: ssl_buffer_size 16k;
Context: http, server
This directive appeared in version 1.5.9.

设置用于发送数据的缓冲区大小。
默认情况下,缓冲区大小为16k,这对应于发送大响应时的最小开销。 为了最小化到第一个字节的时间,使用较小的值可能是有益的,例如:

ssl_buffer_size 4k;

ssl_certificate

Syntax: ssl_certificate file;
Default: —
Context: http, server

指定具有给定虚拟服务器的PEM格式的证书的文件。 如果除了主证书之外还应该指定中间证书,则应按照以下顺序在同一文件中指定中间证书:主证书先出现,然后是中间证书。 PEM格式的秘密密钥可以放置在同一文件中。

从版本1.11.0开始,可以多次指定此伪指令来加载不同类型的证书,例如RSA和ECDSA:

server {
listen 443 ssl;
server_name example.com; ssl_certificate example.com.rsa.crt;
ssl_certificate_key example.com.rsa.key; ssl_certificate example.com.ecdsa.crt;
ssl_certificate_key example.com.ecdsa.key; ...
}

Notes:只有OpenSSL 1.0.2或更高版本支持不同证书的单独证书链。 对于旧版本,只能使用一个证书链。
应该记住,由于HTTPS协议的限制,虚拟服务器应该在不同的IP地址上侦听:

server {
listen 192.168.1.1:443;
server_name one.example.com;
ssl_certificate one.example.com.crt;
...
} server {
listen 192.168.1.2:443;
server_name two.example.com;
ssl_certificate two.example.com.crt;
...
}

否则将为第二个站点发出第一个服务器的证书。

ssl_certificate_key

Syntax: ssl_certificate_key file;
Default: —
Context: http, server

指定具有给定虚拟服务器的PEM格式的密钥的文件。

可以指定值engine:name:id而不是文件(1.7.9),该文件从OpenSSL引擎名称加载具有指定标识的密钥。

ssl_ciphers

Syntax: ssl_ciphers ciphers;
Default: ssl_ciphers HIGH:!aNULL:!MD5;
Context: http, server

指定启用的密码。 密码以OpenSSL库理解的格式指定,例如:

ssl_ciphers ALL:!aNULL:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;

可以使用“openssl ciphers”命令查看完整列表。
以前的nginx版本默认使用不同的密码。

ssl_client_certificate

Syntax: ssl_client_certificate file;
Default: —
Context: http, server

如果启用了ssl_stapling,则指定具有用于验证客户端证书和OCSP响应的PEM格式的受信任CA证书的文件。

证书列表将发送到客户端。 如果不需要,可以使用ssl_trusted_certificate伪指令。

ssl_crl

Syntax: ssl_crl file;
Default: —
Context: http, server
This directive appeared in version 0.8.7.

指定具有用于验证客户端证书的PEM格式的撤销证书(CRL)的文件。

ssl_dhparam

Syntax: ssl_dhparam file;
Default: —
Context: http, server
This directive appeared in version 0.7.2.

指定DHE密码的DH参数的文件。

ssl_ecdh_curve

Syntax: ssl_ecdh_curve curve;
Default: ssl_ecdh_curve auto;
Context: http, server
This directive appeared in versions 1.1.0 and 1.0.6.

指定ECDHE密码的曲线。

当使用OpenSSL 1.0.2或更高版本时,可以指定多个曲线(1.11.0),例如:

ssl_ecdh_curve prime256v1:secp384r1;

特殊值auto(1.11.0)指示nginx在使用OpenSSL 1.0.2或更高版本时使用OpenSSL库中内置的列表,或者使用旧版本的prime256v1。

在版本1.11.0之前,默认使用prime256v1曲线。

ssl_password_file

Syntax: ssl_password_file file;
Default: —
Context: http, server
This directive appeared in version 1.7.3.

指定具有密钥的密码的文件,其中每个密码短语在单独的行上指定。 加载密钥时依次尝试密码。
举例:

http {
ssl_password_file /etc/keys/global.pass;
... server {
server_name www1.example.com;
ssl_certificate_key /etc/keys/first.key;
} server {
server_name www2.example.com; # named pipe can also be used instead of a file
ssl_password_file /etc/keys/fifo;
ssl_certificate_key /etc/keys/second.key;
}
}

ssl_prefer_server_ciphers

Syntax: ssl_prefer_server_ciphers on | off;
Default: ssl_prefer_server_ciphers off;
Context: http, server

指定在使用SSLv3和TLS协议时,服务器密码应优先于客户端密码。

ssl_protocols

Syntax: ssl_protocols [SSLv2] [SSLv3] [TLSv1] [TLSv1.1] [TLSv1.2];
Default: ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
Context: http, server

启用指定的协议。 仅当使用版本1.0.1或更高版本的OpenSSL库时,TLSv1.1和TLSv1.2参数才起作用。

Notes:从版本1.1.13和1.0.12开始支持TLSv1.1和TLSv1.2参数,因此,当旧版nginx版本使用OpenSSL版本1.0.1或更高版本时,这些协议可以正常工作,但不能禁用。

ssl_session_cache

Syntax: ssl_session_cache off | none | [builtin[:size]] [shared:name:size];
Default: ssl_session_cache none;
Context: http, server

设置存储会话参数的高速缓存的类型和大小。 缓存可以是以下任何类型:

  • off:严格禁止使用会话缓存:nginx显式告诉客户端会话可能不会被重用。

  • none:缓慢地禁止使用会话缓存:nginx告诉客户端会话可以被重用,但实际上不在高速缓存中存储会话参数。

  • builtin:一个内置在OpenSSL中的缓存; 仅由一个工作进程使用。 缓存大小在会话中指定。 如果未指定大小,则等于20480个会话。 使用内置缓存可能会导致内存碎片。

  • shared:在所有工作进程之间共享的高速缓存。 缓存大小以字节为单位指定; 一兆字节可以存储约4000个会话。 每个共享缓存应该有一个任意名称。 具有相同名称的缓存可用于多个虚拟服务器。

两种缓存类型可以同时使用,例如:

ssl_session_cache builtin:1000 shared:SSL:10m;

但是只使用没有内置缓存的共享缓存应该更有效。

ssl_session_ticket_key

Syntax: ssl_session_ticket_key file;
Default: —
Context: http, server
This directive appeared in version 1.5.7.

使用用于加密和解密TLS会话票证的密钥设置文件。 如果必须在多个服务器之间共享相同的密钥,则该指令是必需的。 默认情况下,使用随机生成的密钥。

如果指定了几个密钥,则只有第一个密钥用于加密TLS会话票证。 这允许配置按键旋转,例如:

ssl_session_ticket_key current.key;
ssl_session_ticket_key previous.key;

文件必须包含48个字节的随机数据,并且可以使用以下命令创建:

openssl rand 48 > ticket.key

ssl_session_tickets

Syntax: ssl_session_tickets on | off;
Default: ssl_session_tickets on;
Context: http, server
This directive appeared in version 1.5.9.

启用或禁用通过TLS session tickets的会话恢复。

ssl_session_timeout

Syntax: ssl_session_timeout time;
Default: ssl_session_timeout 5m;
Context: http, server

指定客户端可以重用会话参数的时间。

ssl_stapling

Syntax: ssl_stapling on | off;
Default: ssl_stapling off;
Context: http, server
This directive appeared in version 1.3.7.

启用或禁用服务器对OCSP响应的装订。 例:

ssl_stapling on;
resolver 192.0.2.1;

为了OCSP装订工作,应该知道服务器证书颁发者的证书。 如果ssl_certificate文件不包含中间证书,则服务器证书颁发者的证书应该存在于ssl_trusted_certificate文件中。

对于OCSP响应程序主机名的解析,还应指定解析器指令。

ssl_stapling_file

Syntax: ssl_stapling_file file;
Default: —
Context: http, server
This directive appeared in version 1.3.7.

设置时,装订的OCSP响应将从指定的文件中获取,而不是查询服务器证书中指定的OCSP响应程序。

该文件应为“openssl ocsp”命令生成的DER格式。

ssl_stapling_responder

Syntax: ssl_stapling_responder url;
Default: —
Context: http, server
This directive appeared in version 1.3.7.

覆盖在“Authority Information Access”证书扩展中指定的OCSP响应器的URL。

仅支持“http://”OCSP响应程序:

ssl_stapling_responder http://ocsp.example.com/;

ssl_stapling_verify

Syntax: ssl_stapling_verify on | off;
Default: ssl_stapling_verify off;
Context: http, server
This directive appeared in version 1.3.7.

启用或禁用服务器对OCSP响应的验证。

要使验证正常工作,应使用ssl_trusted_certificate指令将服务器证书颁发者的证书,根证书和所有中间证书配置为trusted。

ssl_trusted_certificate

Syntax: ssl_trusted_certificate file;
Default: —
Context: http, server
This directive appeared in version 1.3.7.

如果启用了ssl_stapling,则指定具有用于验证客户端证书和OCSP响应的PEM格式的受信任CA证书的文件。

与由ssl_client_certificate设置的证书不同,这些证书的列表将不会发送到客户端。

ssl_verify_client

Syntax: ssl_verify_client on | off | optional | optional_no_ca;
Default: ssl_verify_client off;
Context: http, server

启用客户端证书的验证。 验证结果存储在$ ssl_client_verify变量中。

可选参数(0.8.7+)请求客户端证书,并在证书存在的情况下对其进行验证。

optional_no_ca参数(1.3.8,1.2.5)请求客户端证书,但不要求其由受信任的CA证书签名。 这适用于在nginx外部的服务执行实际证书验证的情况下使用。 可以通过$ ssl_client_cert变量访问证书的内容。

ssl_verify_depth

Syntax: ssl_verify_depth number;
Default: ssl_verify_depth 1;
Context: http, server

在客户端证书链中设置验证深度。

ngx_http_status_module

ngx_http_status_module模块提供对各种状态信息的访问。
此模块可作为我们商业订阅的一部分。
详细参考

ngx_http_stub_status_module

ngx_http_stub_status_module模块提供对基本状态信息的访问。

此模块不是默认构建的,应使用--with-http_stub_status_module配置参数启用。

stub_status

Syntax: stub_status;
Default: —
Context: server, locatio

可从周围位置访问基本状态信息。

在1.7.5之前的版本中,指令语法需要一个任意参数,例如,“stub_status on”。
举例:

location /basic_status {
stub_status;
}

此配置创建一个简单的网页,其中包含基本状态数据,其格式如下:

Active connections: 291
server accepts handled requests
16630948 16630948 31070465
Reading: 6 Writing: 179 Waiting: 106

提供以下状态信息:

  • Active connections:当前客户端连接数,包括等待连接。

  • accepts:接受的客户端连接的总数。

  • handled:处理的连接的总数。 通常,参数值与accept相同,除非已达到某些资源限制(例如,worker_connections限制)。

  • requests:客户端请求的总数。

  • Reading:nginx正在读取请求头的当前连接数。

  • Writing:nginx正在将响应写回客户端的当前连接数。

  • Waiting:等待请求的空闲客户端连接的当前数量。

ngx_http_sub_module

ngx_http_sub_module模块是一个过滤器,通过用另一个替换一个指定的字符串来修改响应。

此模块不是默认构建的,应使用--with-http_sub_module配置参数启用。

sub_filter

Syntax: sub_filter string replacement;
Default: —
Context: http, server, location

设置要替换的字符串和替换字符串。 要替换的字符串匹配忽略大小写。 要替换的字符串(1.9.4)和替换字符串可以包含变量。 可以在一个配置级别(1.9.4)上指定多个sub_filter伪指令。 当且仅当没有在当前级别上定义的sub_filter指令时,这些指令从上一级继承。

sub_filter_last_modified

Syntax: sub_filter_last_modified on | off;
Default: sub_filter_last_modified off;
Context: http, server, location
This directive appeared in version 1.5.1.

允许在替换期间保留来自原始响应的“Last-Modified”报头字段,以便于响应缓存。

默认情况下,由于在处理期间修改响应的内容,头字段将被删除。

sub_filter_once

Syntax: sub_filter_once on | off;
Default: sub_filter_once on;
Context: http, server, location

指示是要查找要替换一次还是重复的每个字符串。

sub_filter_types

Syntax: sub_filter_types mime-type ...;
Default: sub_filter_types text/html;
Context: http, server, location

除了“text / html”外,还可以在响应中使用指定的MIME类型替换字符串。 特殊值“*”匹配任何MIME类型(0.8.29)。

ngx_http_userid_module

ngx_http_userid_module模块设置适合客户端标识的cookie。 接收和设置的Cookie可以使用嵌入式变量$ uid_got和$ uid_set记录。 此模块与Apache的mod_uid模块兼容。

userid

Syntax: userid on | v1 | log | off;
Default: userid off;
Context: http, server, location

启用或禁用设置Cookie并记录接收的Cookie:

  • on:启用版本2 Cookie的设置并记录接收的Cookie;

  • v1:启用版本1 Cookie的设置并记录接收的Cookie;

  • log:禁用Cookie的设置,但启用记录接收的Cookie;

  • off:禁用Cookie的设置和记录接收的Cookie。

userid_domain

Syntax: userid_domain name | none;
Default: userid_domain none;
Context: http, server, location

定义为其设置Cookie的域。 none参数禁用Cookie的域的设置。

userid_expires

Syntax: userid_expires time | max | off;
Default: userid_expires off;
Context: http, server, location

设置浏览器应保留Cookie的时间。 参数max将导致cookie在“2034年12月31日23:55:55 GMT”过期。 参数off将导致cookie在浏览器会话结束时过期。

userid_mark

Syntax: userid_mark letter | digit | = | off;
Default: userid_mark off;
Context: http, server, location

如果参数未关闭,请启用Cookie标记机制,并设置用作标记的字符。 此机制用于添加或更改userid_p3p和/或cookie到期时间,同时保留客户端标识符。 标记可以是英语字母表(区分大小写),数字或“=”字符的任何字母。

如果设置了标记,则将其与cookie中传递的客户机标识符的base64表示中的第一个填充符号进行比较。 如果它们不匹配,则使用指定的标记,过期时间和“P3P”标头重新发送Cookie。

userid_name

Syntax: userid_name name;
Default: userid_name uid;
Context: http, server, location

设置Cookie名称。

userid_p3p

Syntax: userid_p3p string | none;
Default: userid_p3p none;
Context: http, server, location

设置将与Cookie一起发送的“P3P”标头字段的值。 如果指令设置为特殊值无,则不会在响应中发送“P3P”头。

userid_path

Syntax: userid_path path;
Default: userid_path /;
Context: http, server, location

定义设置Cookie的路径。

userid_service

Syntax: userid_service number;
Default: userid_service IP address of the server;
Context: http, server, location

如果标识符由多个服务器(服务)发出,则应为每个服务分配自己的号码,以确保客户端标识符是唯一的。 对于版本1 Cookie,默认值为零。 对于版本2 Cookie,默认值是由服务器IP地址的最后四个字节组成的数字。

ngx_http_v2_module

ngx_http_v2_module模块(1.9.5)提供对HTTP / 2的支持,并取代ngx_http_spdy_module模块。

此模块不是默认构建的,应使用--with-http_v2_module配置参数启用。
详细参考

ngx_http_xslt_module

ngx_http_xslt_module(0.7.8+)是一个过滤器,它使用一个或多个XSLT样式表转换XML响应。

此模块不是默认构建的,应使用--with-http_xslt_module配置参数启用。
此模块需要libxml2和libxslt库。

xml_entities

Syntax: xml_entities path;
Default: —
Context: http, server, location

指定声明字符实体的DTD文件。 此文件在配置阶段进行编译。 由于技术原因,模块无法使用在处理的XML中声明的外部子集,因此会被忽略,并使用特殊定义的文件。 此文件不应描述XML结构。 只需声明所需的字符实体就足够了,例如:

<!ENTITY nbsp " ">

xslt_last_modified

Syntax: xslt_last_modified on | off;
Default: xslt_last_modified off;
Context: http, server, location
This directive appeared in version 1.5.1.

允许在XSLT转换期间保留来自原始响应的“Last-Modified”头字段,以便于响应缓存。

默认情况下,头字段将被删除,因为响应的内容在转换期间被修改,并且可以包含独立于原始响应而更改的动态生成的元素或部分。

xslt_param

Syntax: xslt_param parameter value;
Default: —
Context: http, server, location
This directive appeared in version 1.1.18.

定义XSLT样式表的参数。 该值被视为XPath表达式。 该值可以包含变量。 要将字符串值传递到样式表,可以使用xslt_string_param指令。

可能有几个xslt_param指令。 当且仅当在当前级别上没有定义xslt_param和xslt_string_param指令时,这些指令才继承上一级。

xslt_string_param

Syntax: xslt_string_param parameter value;
Default: —
Context: http, server, location
This directive appeared in version 1.1.18.

定义XSLT样式表的字符串参数。 不解释值中的XPath表达式。 该值可以包含变量。

可能有几个xslt_string_param指令。 当且仅当在当前级别上没有定义xslt_param和xslt_string_param指令时,这些指令才继承上一级。

xslt_stylesheet

Syntax: xslt_stylesheet stylesheet [parameter=value ...];
Default: —
Context: location

定义XSLT样式表及其可选参数。 样式表是在配置阶段编译的。

参数可以单独指定,也可以使用“:”分隔符在一行中分组。 如果参数包含“:”字符,则应将其转义为“%3A”。 此外,libxslt需要将包含非字母数字字符的参数包含到单引号或双引号中,例如:

param1='http%3A//www.example.com':param2=value2

参数描述可以包含变量,例如,整行参数可以取自单个变量:

location / {
xslt_stylesheet /site/xslt/one.xslt
$arg_xslt_params
param1='$value1':param2=value2
param3=value3;
}

可以指定几个样式表。 它们将按指定的顺序顺序应用。

xslt_types

Syntax: xslt_types mime-type ...;
Default: xslt_types text/xml;
Context: http, server, location

除了“text / xml”之外,还可以使用指定的MIME类型启用响应中的转换。 特殊值“*”匹配任何MIME类型(0.8.29)。 如果转换结果是HTML响应,则其MIME类型更改为“text / html”。

ngx_http_log_module

ngx_http_log_module模块以指定的格式写入请求日志。
请求记录在处理结束的位置的上下文中。 如果在请求处理期间发生内部重定向,则它可能与原始位置不同。

access_log

Syntax: access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;
Default:
access_log logs/access.log combined;
Context: http, server, location, if in location, limit_except

设置缓冲日志写入的路径,格式和配置。可以在同一级别上指定多个日志。可以通过在第一个参数中指定“syslog:”前缀来配置日志记录到syslog。特殊值off取消当前级别上的所有access_log指令。如果未指定格式,则使用预定义的“组合”格式。
如果使用buffer或gzip(1.3.10,1.2.7)参数,将对日志的写入使用buffer。
Notes:缓冲区大小不能超过对磁盘文件的原子写入大小。对于FreeBSD,这个大小是无限的。

启用缓冲时,数据将写入文件:

  • 如果下一个日志行不适合缓冲区;

  • 如果缓冲数据比flush参数(1.3.10,1.2.7)指定的更旧;

  • 当工作进程重新打开日志文件或正在关闭时。

如果使用gzip参数,那么缓冲的数据将在写入文件之前被压缩。压缩级别可以设置在1(最快,较少压缩)和9(最慢,最佳压缩)之间。默认情况下,缓冲区大小等于64K字节,压缩级别设置为1.由于数据以原子块进行压缩,因此日志文件可以由“zcat”随时解压缩或读取。

Example:

access_log /path/to/log.gz combined gzip flush=5m;

要使gzip压缩工作,nginx必须使用zlib库构建。
文件路径可以包含变量(0.7.6+),但这种日志有一些限制:

  • 工作进程使用其凭据的用户应具有在具有此类日志的目录中创建文件的权限;

  • 缓冲写入不工作;

  • 对于每个日志写入,该文件被打开和关闭。 然而,由于经常使用的文件的描述符可以存储在高速缓存中,所以在由open_log_file_cache指令的有效参数指定的时间内可以继续写入旧文件

  • 在每个日志写入期间,检查请求的根目录的存在,如果不存在,则不创建日志。 因此,在同一级别上同时指定root和access_log是一个好主意:

server {
root /spool/vhost/data/$host;
access_log /spool/vhost/logs/$host;
...

if参数(1.7.0)启用条件日志记录。 如果条件求值为“0”或空字符串,则不会记录请求。 在以下示例中,将不记录具有响应代码2xx和3xx的请求:

map $status $loggable {
~^[23] 0;
default 1;
} access_log /path/to/access.log combined if=$loggable;

log_format

Syntax: log_format name [escape=default|json] string ...;
Default: log_format combined "...";
Context: http

指定日志格式。
escape参数(1.11.8)允许在变量中设置json或默认字符转义,默认情况下使用默认转义。
日志格式可以包含公共变量和仅在写日志时存在的变量:

  • $ bytes_sent:发送给客户端的字节数

  • $connection:连接序列号

  • $ connection_requests:通过连接发出的请求的当前数量(1.1.18)

  • $ msec:时间(以秒为单位),在日志写入时具有毫秒分辨率

  • $ pipe:“p”如果请求是流水线的,“.”否则

  • $ request_length:请求长度(包括请求行,头和请求体)

  • $ request_time:请求处理时间(以秒为单位,以毫秒为单位); 从客户端读取第一个字节之间经过的时间,并将最后一个字节后的日志写入发送到客户端

  • $ status:响应状态

  • $ time_iso8601:本地时间采用ISO 8601标准格式

  • $ time_local:公共日志格式中的本地时间

Notes:在现代的nginx版本中,变量$ status(1.3.2,1.2.2),$ bytes_sent(1.3.8,1.2.5),$ connection(1.3.8,1.2.5),$ connection_requests(1.3.8,1.2.5) .5),$ msec(1.3.9,1.2.6),$ request_time(1.3.9,1.2.6),$ pipe(1.3.12,1.2.7),$ request_length(1.3.12,1.2.7 ),$ time_iso8601(1.3.12,1.2.7)和$ time_local(1.3.12,1.2.7)也可作为公共变量使用。

发送到客户端的标题行具有前缀“sent_http_”,例如$ sent_http_content_range。
配置始终包括预定义的“combined”格式:

log_format combined '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent"';

open_log_file_cache

Syntax: open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
open_log_file_cache off;
Default: open_log_file_cache off;
Context: http, server, location

定义一个缓存,用于存储其名称包含变量的常用日志的文件描述符。 该伪指令具有以下参数:

  • max:设置高速缓存中的描述符的最大数量; 如果缓存变满,则关闭最近最少使用(LRU)描述符

  • inactive:设置如果在此时间期间没有访问则缓存的描述符被关闭的时间; 默认为10秒

  • min_uses:设置由inactive参数定义的时间内文件使用的最小数量,以使描述符在缓存中保持打开; 默认为1

  • valid:设置时间,在此之后应检查文件是否仍以相同名称存在; 默认为60秒

  • off:禁用缓存

用法示例:

open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;