http://www.nginx.cn/doc/

基础模块

http核心模块

http://www.nginx.cn/doc/standard/httpcore.html

http upstream 模块

这个模块提供一个简单方法来实现在轮询和客户端IP之间的后端服务器负荷平衡。

配置范例:

upstream backend  {
server backend1.example.com weight=;
server backend2.example.com:;
server unix:/tmp/backend3;
} server {
location / {
proxy_pass http://backend;
}
}

配置指导

ip_hash

语法: ip_hash

默认值: none

作用域: upstream

该指令根据客户端的IP地址导致请求在上游之间分配。 哈希的关键是客户端的C类网络地址。 此方法可确保始终将客户端请求传输到同一服务器。 但是,如果认为此服务器不起作用,则此客户端的请求将被转移到另一台服务器。 这使客户端始终连接到同一服务器的概率很高。

范例:

upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com down;
server backend4.example.com;
}

server

语法: server name [parameters]

默认值: none

作用域: upstream

HttpAccess模块

此模块提供了一个简易的基于主机的访问控制.

ngx_http_access_module 模块使有可能对特定IP客户端进行控制. 规则检查按照第一次匹配的顺序

__配置样例__

location / {
deny 192.168.1.1;
allow 192.168.1.0/;
allow 10.1.1.0/;
deny all;
}

在上面的例子中,仅允许网段 10.1.1.0/16 和 192.168.1.0/24中除 192.168.1.1之外的ip访问.

当执行很多规则时,最好使用 ngx_http_geo_module 模块.

allow

语法: allow [ address | CIDR | all ]

默认值: no

作用域: http, server, location, limit_except

以上描述的网络地址有权直接访问

deny

语法: deny [ address | CIDR | all ]

默认值: no

作用域: http, server, location, limit_except

以上描述的网络地址拒绝访问

相关阅读:http://nginx.org/ru/docs/http/ngx_http_access_module.html

HttpAuthBasic模块

该模块可以使你使用用户名和密码基于 HTTP 基本认证方法来保护你的站点或其部分内容。

__实例配置__

location  /  {
auth_basic "Restricted";
auth_basic_user_file conf/htpasswd;
}

auth_basic

语法: auth_basic [ text|off ]

默认值: auth_basic off

作用域: http, server, location, limit_except

该指令包含用于 HTTP 基本认证 的测试名和密码。分配的参数用于认证领域。值 "off" 可以使其覆盖来自上层指令的继承性。

auth_basic_user_file

语法: auth_basic_user_file the_file

默认值: no

作用域: http, server, location, limit_except

该指令为某认证领域指定 htpasswd 文件名。

文件格式类似于下面的内容:

用户名:密码
用户名2:密码2:注释
用户名3:密码3

密码必须使用函数 crypt(3) 加密。 你可以使用来自 Apache 的 htpasswd 工具来创建密码文件。

你也可以使用perl 创建密码文件,pw.pl 的内容:

#!/usr/bin/perl
use strict; my $pw=$ARGV[] ;
print crypt($pw,$pw)."\n";

然后执行

chmod +x pw.pl
./pw.pl password
papAq5PwY/QQM

papAq5PwY/QQM 就是password 的crypt()密码

HttpAutoindex模块

此模块用于自动生成目录列表.

ngx_http_autoindex_module只在 ngx_http_index_module模块未找到索引文件时发出请求.

__配置实例__

location  /  {
autoindex on;
}

autoindex

语法: autoindex [ on|off ]

默认值: autoindex off

作用域: http, server, location

激活/关闭自动索引

autoindex_exact_size

语法: autoindex_exact_size [ on|off ]

默认值: autoindex_exact_size on

作用域: http, server, location

设定索引时文件大小的单位(B,KB, MB 或 GB)

autoindex_localtime

语法: autoindex_localtime [ on|off ]

默认值: autoindex_localtime off

作用域: http, server, location

开启以本地时间来显示文件时间的功能。默认为关(GMT时间)

相关阅读:http://nginx.org/ru/docs/http/ngx_http_autoindex_module.html

Browser模块

摘要

This module creates variables, the values of which depend on the request header "User-agent":

本模块的变量基于请求头(header)中的"User-agent":

  • $modern_browser - is equal to the value, assigned by directive modern_browser_value, if browser is identified as an modern browser;
  • $ancient_browser - 当等于指定给modern_browser_value的浏览器时,这个浏览器被认定为新版的浏览器;
  • $ancient_browser - is equal to the value, assigned by directive ancient_browser_value, if browser is identified as an old browser;
  • $ancient_browser - 当等于指定给ancient_browser_value的浏览器时,这个浏览器被认定为老版的浏览器;
  • $msie - is equal 1, if browser is identified as MSIE with any version;
  • $msie - 当浏览器为MSIE的任何版本时,这个值等于1;

If you don't need this module add --without-http_browser_module parameter to the ./configure call, at compile time.

如果不需要这个模块时,在编译的时候加上 --without-http_browser_module.

Example configuration 例如配置

Selection of the index file:

选择索引文件:

modern_browser_value "modern.";

modern_browser msie 5.5;
modern_browser gecko 1.0.;
modern_browser opera 9.0;
modern_browser safari ; modern_browser konqueror 3.0;
index index.${modern_browser}html index.html;

Redirect for the old browsers:

定义老的浏览器:

modern_browser msie 5.0;

modern_browser gecko 0.9.;
modern_browser opera 8.0;
modern_browser safari ;
modern_browser konqueror 3.0; modern_browser unlisted;
ancient_browser Links Lynx Netscape4; if ($ancient_browser){
rewrite ^ /ancient.html;
}

ancient_browser

语法: ancient_browser line [ line... ]

默认值: no

作用域: http, server, location

指令分配子字符串,在“用户代理”行中,浏览器被认为是旧的。
特殊行“netscape4”对应正则表达式“^ Mozilla / [1-4]”。

ancient_browser_value

语法: ancient_browser_value line

默认值: ancient_browser_value 1

作用域: http, server, location

定义 $ancient_browser的变量值.

modern_browser

语法: modern_browser browser version|unlisted

默认值: no

作用域: http, server, location

Directive指定哪个版本的浏览器被认为是现代的。
作为浏览器,您可以分配值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。

特殊值“不公开”表示考虑现代浏览器,而不是由modern_browser和ancient_browser指令描述。
否则neperechislennyy浏览器将被视为过时。
如果标头不包含“User-agent”,则浏览器被视为neperechislennym。

modern_browser_value

语法: modern_browser_value line

默认值: modern_browser_value 1

作用域: http, server, location

定义$modern_browser的变量值.

http://nginx.org/ru/docs/http/ngx_http_browser_module.html

Charset模块

此模块将文本编码添加到“Content-Type shown”响应标头中。

此外,模块可以将一种编码的数据重新编码为另一种编码。 需要注意的是,重新编码只能在一个方向上完成 - 从服务器到客户端,并且只能重新编码一个字节的编码。

配置示例:

charset         windows-;
source_charset koi8-r;

charset

语法: charset encoding|off

默认值: charset off

作用域: http, server, location, if in location

指令字符集将“Content-Type”行添加到带有指示编码的response-header中。 如果此编码与指令source_charset中指示的编码不同,则执行重新编码。 参数“off”取消激活响应标题中“Content-Type”行的插入。

charset_map

语法: charset_map encoding1 encoding2 {...}

默认值: no

作用域: http, server, location

指令charset_map描述了从一种编码到另一种编码的重新编码表。 使用相同的数据创建用于逆重新编码的表。 符号代码以十六进制形式分配。 如果没有记录的符号在80-FF范围内,则它们将被替换为“?”。

用法示例:

charset_map  koi8-r  windows- {
C0 FE ; # small yu
C1 E0 ; # small a C2 E1 ; # small b
C3 F6 ; # small ts
# ...
}

从koi8-r到Windows-1251的完整转换表与nginx一起分发,位于文件conf / koi-win中。

override_charset

语法: override_charset on|off

默认值: override_charset off

作用域: http, server, location, if in location

如果在响应头中已经有“Content-Type”头,则该指令确定从代理服务器或从FastCGI服务器获得的响应的重新编码。 如果允许重新编码,则使用在获得的答案中指示的编码作为初始编码。

需要注意的是,如果在子查询中获得响应,那么独立于指令override_charset,总是执行从响应的编码重新编码到基本需求的编码。

source_charset

语法: source_charset encoding

默认值: no

作用域: http, server, location, if in location

指令source_charset指定响应的初始编码。 如果此编码与指令字符集中指示的编码不同,则执行重新编码。

http://nginx.org/ru/docs/http/ngx_http_charset_module.html

HttpEmptyGif模块

本模块在内存中常驻了一个 1x1 的透明 GIF 图像,可以被非常快速的调用。

示例:

location = /_.gif {
empty_gif;
}

empty_gif

语法: empty_gif

默认值: n/a

作用域: location

http://nginx.org/ru/docs/http/ngx_http_empty_gif_module.html

HttpFcgi模块

这个模块允许Nginx 与FastCGI 进程交互,并通过传递参数来控制FastCGI 进程工作。

配置实例:

location / {
fastcgi_pass localhost:;
fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/www/scripts/php$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
}

fastcgi_buffers

语法: fastcgi_buffers the_number is_size;

默认值: fastcgi_buffers 8 4k/8k;

作用域: http, server, location

该指令集设置缓冲区的数量和大小,用于缓存从 FastCGI Server 接收到的数据。默认情况下,一个缓冲区的大小相当于一个页面的大小。根据平台的不同设置为4K/8K

fastcgi_buffer_size

语法: fastcgi_buffer_size the_size

默认值: fastcgi_buffer_size 4k/8k

作用域: http, server, location

该指令设置buffersize,从fastcgi服务器获取响应的第一部分。

在这部分响应中,通常会定位小响应标头。

默认情况下,buffersize等于指令fastcgi_buffers中一个缓冲区的大小; 但是,可以将其设置为更小。

fastcgi_cache

语法: fastcgi_cache zone;

默认值: none

作用域: http, server, location

设置缓存在共享内存中的名称. 一块区域可以被用于不用的地方.

fastcgi_cache_key

语法: fastcgi_cache_key line ;

默认值: none

作用域: http, server, location

设置缓存的key, 例:

fastcgi_cache_key localhost: $request_uri;

fastcgi_cache_methods

语法: fastcgi_cache_methods [GET HEAD POST];

默认值: fastcgi_cache_methods GET HEAD;

作用域: main,http,location

GET / HEAD是语法糖,即使你刚刚设置,你也无法禁用GET / HEAD

fastcgi_cache_methods  POST;

fastcgi_cache_min_uses

语法: fastcgi_cache_min_uses n

默认值: fastcgi_cache_min_uses 1

作用域: http, server, location

fastcgi_cache_path

语法: fastcgi_cache_path /path/to/cache [levels=m:n keys_zone=name:time inactive=time clean_time=time]

默认值: none

作用域: http, server, location

fastcgi_cache_use_stale

语法: fastcgi_cache_use_stale [updating|error|timeout|invalid_header|http_500]

默认值: fastcgi_cache_use_stale off;

作用域: http, server, location

fastcgi_cache_valid

语法: fastcgi_cache_valid [http_error_code|time]

默认值: none

作用域: http, server, location

fastcgi_index

语法: fastcgi_index file

默认值: none

作用域: http, server, location

如果URI以斜杠结尾,则将附加到URI并存储在变量$ fastcgi_script_name中的文件的名称。

fastcgi_hide_header

语法: fastcgi_hide_header name

作用域: http, server, location

默认情况下Nginx 不会从FastCGI 进程里给客户端发送"Status" 和"X-Accel-..." 消息头。这个指令可以用来掩饰别的headers 。

如果需要"Status" 和"X-Accel-..." 消息头,那就需要使用这个指令让FastCGI 强制发送消息头给客户端。

fastcgi_ignore_client_abort

语法: fastcgi_ignore_client_abort on|off

默认值: fastcgi_ignore_client_abort off

作用域: http, server, location

这个指令用来决定忽略用户取消的请求。

fastcgi_intercept_errors

语法: fastcgi_intercept_errors on|off

默认值: fastcgi_intercept_errors off

作用域: http, server, location

这个指令用来决定是否要把客户端转向4xx和5xx错误页,或允许Nginx自动指定错误页页。

注意:你需要在此明确错误页,它才是有用的。Igor 曾说:“如果没有定制的处理机制,Nginx不会拦截一个没有缺省页的错误。Nginx 只会拦截一些小的错误,放过其他一些。

fastcgi_param

语法: fastcgi_param parameter value

默认值: none

作用域: http, server, location

该指令指定的参数,将被传递给FastCGI-server。

它可能使用字符串、变量及其它们的组合来作为参数值。如果不在此制定参数,它就会继承外层设置;如果在此设置了参数,将清除外层相关设置,仅启用本层设置。

下面是一个例子,对于PHP来说的最精简的必要参数:

  fastcgi_param  SCRIPT_FILENAME  /home/www/scripts/php$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;

参数SCRIPT_FILENAME 是PHP 用来确定执行脚本的名字,而参数QUERY_STRING 是它的一个子参数。

如果要处理POST,那么这三个附加参数是必要的:

  fastcgi_param  REQUEST_METHOD   $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;

如果PHP 在编译时使用了--enable-force-cgi-redirect选项,设置参数REDIRECT_STATUS 的值为200就是必须的了。

  fastcgi_param  REDIRECT_STATUS  ;

Geo模块

摘要

此模块创建变量,其值取决于客户端的IP地址。

配置示例:

geo  $geo  {

  default          ;
127.0.0.1/ ;
192.168.1.0/ ;
10.1.0.0/ ; }

geo

语法: geo [$ip_variable] $variable { ... }

默认值: none

作用域: http

该指令描述了变量值对客户端IP地址的依赖性。 默认情况下,用于查找的IP地址是$ remote_addr,但是从版本0.7.27开始,可以指定应该使用哪个变量。

geo  $arg_remote_addr $geo {
...;
}

地址以CIDR的形式分配。 此外,还有四个特殊参数:

描述示例:

delete - 删除指定的网络(0.7.23)。
default - 如果客户端地址与任何分配的地址不对应,则为变量的值。 可以编写而不是默认值0.0.0.0/0。
include - 包含地址和值信息的文本文件。 可以像这样包含几个文件。
proxy - 指定代理服务器的地址(0.8.7+)。 需要更多说明......
ranges - 指定指定的地址采用范围(0.7.23)的形式。 该指令必须是第一个。

geo  $country  {
default no;
include conf/geo.conf;
127.0.0.0/ us;
127.0.0.1/ ru;
10.1.0.0/ ru;
192.168.1.0/ uk;
}

在文件conf / geo.conf中:

10.2.0.0/      ru;
192.168.2.0/ ru;

该值将是具有最大一致性的值。 例如,IP地址127.0.0.1将获得值“ru”,但不是“us”。

范围示例:

 geo  $country  {
ranges;
default no;
127.0.0.0-127.0.0.0 us;
127.0.0.1-127.0.0.1 ru;
127.0.0.1-127.0.0.255 us;
10.1.0.0-10.1.255.255 ru;
192.168.1.0-192.168.1.255 uk;
}

HttpGzip模块

这个模块支持在线实时压缩输出数据流

__使用范例__

 gzip             on;
gzip_min_length ;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain application/xml;

内置变量 $gzip_ratio 可以获取到gzip的压缩比率

gzip

语法: gzip on|off

默认值: gzip off

作用域: http, server, location, if (x) location

开启或者关闭gzip模块

gzip_buffers

语法: 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_level

语法: gzip_comp_level 1..9

默认值: gzip_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自解压,用户就会看到乱码,所以做一些判断还是有必要的。 注:21世纪都来了,现在除了类似于百度的蜘蛛之类的东西不支持自解压,99.99%的浏览器基本上都支持gzip解压了,所以可以不用设这个值,保持系统默认即可。

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

gzip_types

语法: gzip_types mime-type [mime-type ...]

默认值: gzip_types text/html

作用域: http, server, location

匹配MIME类型进行压缩,(无论是否指定)"text/html"类型总是会被压缩的。

注意:如果作为http server来使用,主配置文件中要包含文件类型配置文件

http
{
include conf/mime.types;
......
}

如果你希望压缩常规的文件类型,可以写成这个样子

http
{
include conf/mime.types; gzip on;
gzip_min_length ;
gzip_buffers 8k;
gzip_http_version 1.1;
gzip_types text/plain application/x-javascript text/css text/html application/xml; ......
}

http://nginx.org/ru/docs/http/ngx_http_gzip_module.html

HttpHeaders模块

本模板可以设置HTTP报文的头标。

__示例__

 expires     24h;
expires ;
expires -;
expires epoch;
add_header Cache-Control private;

add_header

语法: add_header name value

默认值: none

作用域: http, server, location

当HTTP应答状态码为 200、204、301、302 或 304 的时候,增加指定的HTTP头标。

其中头标的值可以使用变量。

expires

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

默认值: expires off

作用域: http, server, location

使用本指令可以控制HTTP应答中的“Expires”和“Cache-Control”的头标,(起到控制页面缓存的作用)。

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

epoch

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

max

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

-

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

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

负数:

Cache-Control: no-cache

正数或零:

Cache-Control: max-age = #

, # 为您指定时间的秒数。

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

http://nginx.org/ru/docs/http/ngx_http_headers_module.html

HttpIndex模块

index

语法: index file [file...]

默认值: index index.html

作用域: http, server, location

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

index  index.$geo.html  index..html  /index.html;

http://nginx.org/ru/docs/http/ngx_http_index_module.html

HttpReferer模块

摘要

此模块可以使用请求标头中“Referer”行的错误值来阻止对站点的访问。

请记住,很容易欺骗这个标题; 因此,使用此模块的目的不在于100%阻止这些请求,而在于阻止从典型浏览器发出的大量请求。 此外,考虑到典型的浏览器并不总是提供“Referer”标头,即使对于正确的请求也是如此。

location /photos/ {
valid_referers none blocked www.mydomain.com mydomain.com; if ($invalid_referer) {
return ;
} }

valid_referers

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

默认值: none

作用域: server, location

该指令为变量赋值0或1

$invalid_referer

基于的内容referer头。

您可以使用它来帮助减少来自外部站点的深层链接。 如果referer头在列表valid_referers中没有计入, 然后$invalid_referer将设置为1(参见上面的示例)。

参数可以如下:

none

表示没有“Referer”标题。

blocked

意味着受阻

Referer

header by firewall,例如“Referer:XXXXXXX”。server_names是一个或多个服务器的列表。 从版本0.5.33开始,可以在服务器名称中使用*通配符。

http://nginx.org/ru/docs/http/ngx_http_referer_module.html

HttpLimit zone

本模块可以针对条件,进行会话的并发连接数控制。(例如:限制每个IP的并发连接数。)

__配置示例__

http {
limit_zone one $binary_remote_addr 10m; ... server { ... location /download/ {
limit_conn one ;
}

limit_zone

语法: limit_zone zone_name $variable the_size

默认值: no

作用域: http

本指令定义了一个数据区,里面记录会话状态信息。
$variable 定义判断会话的变量;the_size 定义记录区的总容量。

例子:

limit_zone   one  $binary_remote_addr  10m;

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

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

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

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

limit_conn

语法: limit_conn zone_name the_size

默认值: no

作用域: http, server, location

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

例子:

limit_zone   one  $binary_remote_addr  10m;

 server {
location /download/ {
limit_conn one ;
}

定义一个叫“one”的记录区,总容量为 10M,以变量 $binary_remote_addr 作为会话的判断基准(即一个地址一个会话)。 限制 /download/ 目录下,一个会话只能进行一个连接。 简单点,就是限制 /download/ 目录下,一个IP只能发起一个连接,多过一个,一律503。

http://nginx.org/ru/docs/http/ngx_http_limit_zone_module.html

HttpLimitReqest模块

此模块允许您使用一个地址限制给定会话的请求数,或作为特殊情况。

使用漏桶进行限制。

 
 示例配置
http {
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; ... server { ... location /search/ { limit_req zone=one burst=;
}

limit_req_zone

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

默认值: none

作用域: http

该指令描述了存储会话状态的区域。 会话的值由给定变量确定。 用法示例:

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

在这种情况下,会话状态被分配10MB作为称为“一”的区域,并且该区域的查询的平均速度限制为每秒1个请求。

在这种情况下,每个用户都会跟踪会话,但请注意,我们使用变量$ binary_remote_addr而不是变量$ binary_remote_addr,将状态大小减小到64个字节。 1 MB区域可容纳大约16000个此大小的状态。

速度设置为每秒请求数或每分钟请求数。 速率必须是整数,因此如果您需要每秒指定少于一个请求(例如,每两秒一个请求),则将其指定为“30r / m”。

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

默认值: none

作用域: http, server, location

该指令指定区域(区域)和请求的最大可能突发(突发)。 如果速率超过区域中列出的要求,则会延迟请求,以便以给定的速度处理查询。 超出的请求会延迟,直到其数量不超过指定的突发数量。 在这种情况下,请求完成代码“服务不可用”(503)。 默认情况下,突发为零。

例如,指令

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

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

允许用户平均每秒不超过1个请求,突发不超过5个查询。 如果不需要限制突发延迟内的超额请求,则应使用nodelay:

limit_req   zone=one  burst=  nodelay;

HttpLog模块

ngx_http_log_module实例

log_format  gzip  '$remote_addr - $remote_user [$time_local]  '
'"$request" $status $bytes_sent '
'"$http_referer" "$http_user_agent" "$gzip_ratio"';
access_log /spool/logs/nginx-access.log gzip buffer=32k;

access_log

语法: access_log path [format [buffer=size | off ] 默认值: access_log log/access.log combined

作用域: http, server, location

指令 access_log 指派路径、格式和缓存大小。参数 "off" 将清除当前级别的所有 access_log 指令。如果未指定格式,则使用预置的 "combined" 格式。缓存不能大于能写入磁盘的文件的最大大小。在 FreeBSD 3.0-6.0 ,缓存大小无此限制。

log_format

语法: log_format name format [format ...]

默认值: log_format combined "..."

作用域: http server

指令log_format描述了日志条目的格式。 除了格式中的一般变量之外,还可以使用仅在记录到日志时存在的变量:

$ body_bytes_sent,发送到客户端的字节数减去响应头,变量与模块Apache的mod_log_config的参数%B兼容(在版本0.3.10之前称为$ apache_bytes_sent)
$ bytes_sent,传输到客户端的字节数
$ connection,连接数
$ msec,日志条目时精度为微秒的时间
$ pipe,如果请求是流水线操作则为“p”
$ request_length,请求正文的长度
$ request_time,在几秒钟内处理请求的时间
$ status,回答状态
$ time_local,将本地时间转换为通用日志格式。
传输到客户端的标头从前缀“sent_http_”开始,例如$ sent_http_content_range。

在配置中总是有一个预定的格式“组合”:

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

http://sysoev.ru/nginx/docs/http/ngx_http_log_module.html

map

此模块允许您将一组值分类或映射到一组不同的值,并将结果存储在变量中。

例:

map  $http_host  $name  {
hostnames; default ; example.com ;
*.example.com ;
test.com ;
*.test.com ;
.site.com ; }

一个用途是使用映射代替编写大量服务器/位置指令或重定向:

map $uri $new {
default http://www.domain.com/home/; /aa http://aa.domain.com/;
/bb http://bb.domain.com/;
/john http://my.domain.com/users/john/; } server {
server_name www.domain.com;
rewrite ^ $new redirect;
}

map

语法: map $var1 $var2 { ... }

默认值: none

作用域: http

map定义将用于设置变量的映射表。 有三个特殊参数:

default - 定义在未找到匹配项时使用的值。
主机名 - 它允许更容易地匹配主机名等值,具有起始点的名称可以匹配确切的主机名和以该值结尾的主机名,例如:

*.example.com  ; 

而不是两个条目

example.com    ;
*.example.com ;

我们只能使用一个

.example.com   ;

include - 包含文件中的值。 可以使用多个包括。

map_hash_max_size

语法: map_hash_max_size number

默认值: map_hash_max_size 2048

作用域: http

该指令设置哈希表的最大大小以容纳变量映射。 有关更多详细信息,请参阅哈希设置优化部分的说明。

map_hash_bucket_size

语法: map_hash_bucket_size n

默认值: map_hash_bucket_size 32/64/128

作用域: http

该指令设置哈希表中的最大大小以映射变量。 默认值取决于缓存行处理器的大小。 有关详细信息,请参阅优化部分中的哈希设置说明。

http://nginx.org/ru/docs/http/ngx_http_map_module.html

Memcached

你可以利用本模块来进行简单的缓存以提高系统效率。本模块计划在未来进行扩展。

__配置示例__

server {
location / {
set $memcached_key $uri;
memcached_pass name:;
default_type text/html;
error_page = /fallback;
} location = /fallback {
proxy_pass backend;
}
}

memcached_pass

语法: memcached_pass [ name:port ]

默认值: none

作用域: http, server, location

后端应该在memcached中设置数据。 memcached键是“/ uri?args”。

从0.5.9开始,memcached密钥就在了$memcached_key

memcached_connect_timeout

语法: memcached_connect_timeout [ time ]

默认值: 60000

作用域: http, server, location

连接到memcached的超时时间,以毫秒为单位。

memcached_read_timeout

语法: memcached_read_timeout [ time ]

默认值: 60000

作用域: http, server, location

从memcached读取的超时,以毫秒为单位。

memcached_send_timeout

语法: memcached_send_timeout [ time ]

默认值: 60000

作用域: http, server, location

发送到memcached的超时时间,以毫秒为单位。

memcached_buffer_size

语法: memcached_buffer_size [ size ]

默认值: see getpagesize(2)

作用域: http, server, location

recv / send缓冲区大小,以字节为单位。

memcached_next_upstream

语法: memcached_next_upstream [ error | timeout | invalid_response | not_found | off ]

默认值: error timeout

作用域: http, server, location

哪些故障条件会导致请求转发到另一个上游服务器? 仅当memcached_pass中的值是具有两个或更多服务器的上游时才适用。

HttpProxy模块

http://www.nginx.cn/doc/standard/httpproxy.html

HttpRewrite模块

该模块允许使用正则表达式改变URI,并且根据变量来转向以及选择配置。

如果在server级别设置该选项,那么他们将在location之前生效。如果在location还有更进一步的重写规则,location部分的规则依然会被执行。如果这个URI重写是因为location部分的规则造成的,那么location部分会再次被执行作为新的URI。

这个循环会执行10次,然后Nginx会返回一个500错误。

break

语法: break

默认值: none

作用域: server, location, if

作用是完成当前的规则列

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

if

语法: if (condition) { ... }

默认值: none

作用域: server, location

检查条件。 如果条件的计算结果为true,则执行花括号中指示的代码,并根据下一个块中的配置处理请求。 如果从上一级继承,则指令内部的配置。

它们可以被指定为条件:

变量的名称; false值为:空字符串“”或任何以“0”开头的字符串;
使用=和!=运算符将变量与行进行比较;

使用符号〜*和〜:〜与正则表达式匹配的模式是区分大小写的匹配;

  • '~'符合,但是大小写敏感
  • ~*大小写不敏感的符合(firefox符合FireFox)
  • !~和!~*代表相反,“不符合”
  • 使用-f以及!-f检测一个文件是否存在
  • 使用-d以及!-d检测一个目录是否存在
  • 使用-e以及!-e检测是否存在一个文件,一个目录或者一个符号链接。
  • 使用-x以及!-x检测一个文件是否可执行

正则表达式的部分可以在括号中,之后可以在$ 1到> $ 9变量中访问其值。

使用示例:

if ($http_user_agent ~ MSIE) {
rewrite ^(.*)$ /msie/$ break;
}
if ($http_cookie ~* "id=([^;] +)(?:;|$)" ) {
set $id $;
}
if ($request_method = POST ) {
return ;
}
if (!-f $request_filename) {
break;
proxy_pass http://127.0.0.1;
}
if ($slow) {
limit_rate 10k;
}
if ($invalid_referer) {
return ;
}

内置变量$ invalid_referer的值由指令valid_referers给出。

return

语法: return code

默认值: none

作用域: server, location, if

这个指令根据规则的执行情况,返回一个状态值给客户端。可使用值包括:204,400,402-406,408,410,411,413,416以及500-504。也可以发送非标准的444代码-未发送任何头信息下结束连接。

rewrite

语法: rewrite regex replacement flag

默认值: none

作用域: server, location, if

这个指令根据表达式来更改URI,或者修改字符串。指令根据配置文件中的顺序来执行。

注意重写表达式只对相对路径有效。如果你想配对主机名,你应该使用if语句,如下:

if ($host ~* www\.(.*)) {
set $host_without_www $;
rewrite ^(.*)$ http://$host_without_www$1 permanent; # $1 contains '/foo', not 'www.mydomain.com/foo'
}

标志使得可以结束重写指令的执行。

如果替换字符串以http://开头,则客户端将被重定向,并且任何进一步的重写指令都将终止。

标志可以是以下任何一种:

last - 完成重写指令的处理,之后搜索相应的URI和位置
break - 完成重写指令的处理
redirect - 返回代码为302的临时重定向; 如果替换行以http:// permanent开头,则使用它 - 返回代码为301的永久重定向

请注意,如果重定向是相对的(没有主机部分),那么当重定向Nginx时,如果标头匹配server_name指令的名称或server_name指令的名字,则重定向使用“主机”标头,如果标头不匹配或不存在。 如果未设置server_name,则使用本地主机名。 如果您希望Nginx始终使用“主机”标头,则可以使用通配符“*”server_name(但请参阅此限制)。示例:

rewrite  ^(/download/.*)/media/(.*)\..*$  $/mp3/$.mp3  last;
rewrite ^(/download/.*)/audio/(.*)\..*$ $/mp3/$.ra last;
return ;

但是如果我们将这些指令放在location / download /中,那么有必要用“break”替换标志“last”,否则nginx将达到10个循环限制并返回错误500:

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

如果指示了替换参数行,则将其余的请求参数附加到它们。 为避免附加它们,请将问号作为最后一个字符:

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

注: 对花括号( { 和 } )来说, 他们既能用在重定向的正则表达式里,也是用在配置文件里分割代码块, 为了避免冲突, 正则表达式里带花括号的话,应该用双引号(或者单引号)包围。比如,要将类似以下的url

/photos/ 

重定向到:

/path/to/photos///.png 

可以用以下方法 (注意双引号):

rewrite  "/photos/([0-9] {2})([0-9] {2})([0-9] {2})" /path/to/photos/$/$$/$$$.png; 

set

语法: set variable value

默认值: none

作用域: server, location, if

指令为指示的变量建立值。 作为值,可以使用文本,变量及其组合。

uninitialized_variable_warn

语法: uninitialized_variable_warn on|off

默认值: uninitialized_variable_warn on

作用域: http, server, location, if

启用或禁用记录有关非初始化变量的警告。

在内部,重写指令在配置文件加载到内部代码时编译,在解释器请求期间可用。

这个解释器是一个简单的堆栈虚拟机。 例如,指令:

location /download/ {
if ($forbidden) {
return ;
}
if ($slow) {
limit_rate 10k;
}
rewrite ^/(download/.*)/media/(.*)\..*$ /$/mp3/$.mp3 break;
}

将被编译成这个序列:

 variable $forbidden
checking to zero
recovery
completion of entire code
variable $slow
checking to zero
checkings of regular expression
copying "/"
copying $
copying "/mp3/"
copying $
copying "..mpe" completion of regular expression
completion of entire sequence

请注意,没有指令limit_rate的代码,因为它没有引用模块ngx_http_rewrite_module。 “if”块与“location”指令存在于配置的相同部分。

如果$ slow为真,则评估“if”块内部的内容,并且在此配置中limit_rate等于10k。

指示:

rewrite  ^/(download/.*)/media/(.*)\..*$  /$/mp3/$.mp3  break;

如果在正则表达式中我们在括号内包含第一个斜杠,则可以减少序列:

rewrite  ^(/download/.*)/media/(.*)\..*$  $/mp3/$.mp3  break;

然后序列将如下所示:

 checking regular expression
copying $
copying "/mp3/"
copying $
copying "..mpe"
completion of regular expression
completion of entire code

HttpSSI模块

http://www.nginx.cn/doc/standard/httpssi.html

HttpUserId

http://www.nginx.cn/doc/standard/userid.html

nginx基础模块的更多相关文章

  1. day63:Linux:nginx基础知识&nginx基础模块

    目录 1.nginx基础知识 1.1 什么是nginx 1.2 nginx应用场景 1.3 nginx组成结构 1.4 nginx安装部署 1.5 nginx目录结构 1.6 nginx配置文件 1. ...

  2. Nginx 常用基础模块

    目录 Nginx 常用基础模块 Nginx日志管理 nginx日志切割 Nginx目录索引 Nginx状态监控 Nginx访问控制 Nginx访问限制 Nginx 请求限制配置实战 Nginx Loc ...

  3. Nginx基础知识之————多模块(非覆盖安装、RTMP在线人数实例安装测试)

    说明:已经安装好的nginx,需要添加一个未被编译安装的模块,需要怎么弄呢? 具体:这里以安装第三方nginx-rtmp-module和nginx-accesskey-2.0.3模块为例,nginx的 ...

  4. Nginx详解七:Nginx基础篇之Nginx官方模块

    Nginx官方模块 --with-http_stub_status_module:Nginx的客户端状态,用于监控连接的信息,配置语法如下:配置语法:stub_status;默认状态:-配置方法:se ...

  5. 【推荐】Nginx基础知识之————多模块(非覆盖安装、RTMP在线人数实例安装测试)

    说明:已经安装好的nginx,需要添加一个未被编译安装的模块,需要怎么弄呢? 具体:这里以安装第三方nginx-rtmp-module和nginx-accesskey-2.0.3模块为例,nginx的 ...

  6. 基于Nginx dyups模块的站点动态上下线并实现简单服务治理

    简介 今天主要讨论一下,对于分布式服务,站点如何平滑的上下线问题. 分布式服务 在分布式服务下,我们会用nginx做负载均衡, 业务站点访问某服务站点的时候, 统一走nginx, 然后nginx根据一 ...

  7. Nginx 切片模块、断点续传

    熟悉 CDN 行业主流技术的朋友应该都比较清楚,虽然 Nginx 近几年发展的如日中天,但是基本上没有直接使用它自带的 proxy_cache 模块来做缓存的,原因有很多,例如下面几个: 不支持多盘 ...

  8. Nginx基础整理

    目录结构如下: Nginx基础知识 Nginx HTTP服务器的特色及优点 Nginx的主要企业功能 Nginx作为web服务器的主要应用场景包括: Nginx的安装 安装环境 快速安装命令集合 各个 ...

  9. nginx 的模块及处理流程

         nginx的内部结构是由核心部分和一系列的功能模块所组成.这样划分是为了使得每个模块的功能相对简单,便于开发,同时也便于对系统进行功能扩展.这样的模块化设计类似于面向对象中的接口类,它增强了 ...

随机推荐

  1. CentOS7搭建git服务器

    在CentOS7上搭建git服务器, 1.在Linux上安装git yum install -y git 验证是否安装成功,出现版本号即成功 git --version 2.创建版本库和用户 创建用户 ...

  2. Android笔记(四十六) Android中的数据存储——XML(二)PULL解析

    PULL 的工作原理: XML pull提供了开始元素和结束元素.当某个元素开始时,可以调用parser.nextText()从XML文档中提取所有字符数据.当解析到一个文档结束时,自动生成EndDo ...

  3. 常用模块(collections模块,时间模块,random模块,os模块,sys模块,序列化模块,re模块,hashlib模块,configparser模块,logging模块)

    认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的 ...

  4. [nginx] nginx源码分析--监控检测模块

    描述 HTTP监控检查,是nginx官网推荐使用的第三方模块 https://www.nginx.com/resources/wiki/modules/healthcheck/ https://git ...

  5. maven报错找不到依赖

    遇到一个巨坑 跑公司的一个项目,拉下来代码,跑不起来.发现maven一直报这个错 was cached in the local repository,resolution will not be r ...

  6. P1600 天天爱跑步[桶+LCA+树上差分]

    题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵 ...

  7. sql查询排序

        ORDER BY _column1, _column2; /* _column1升序,_column2升序 */   ORDER BY _column1, _column2 DESC; /* ...

  8. Spring源码窥探之:ImportSelector

    1. 编写实现ImportSelector的类 /** * @author 70KG * @Title: SelectImportBean * @Description: * @date 2018/7 ...

  9. 应该知道的linux命令

    常用命令 1.在compose Bar下可以对多个服务器同时进行操作.选择To All Sessions 2. 查看JAVA进程: ps -ef | grep java ps auxf | grep ...

  10. mysql导出PDM文件步骤

    打开mysql把表导出成sql文件(如:service.sql) powerdesigner:选择 File--->Reverse Engineer--->Database 重命名(mod ...