nginx基础模块
基础模块
- HTTP Core模块*
- HTTP Upstream 模块
- HTTP Access 模块
- HTTP Auth Basic 模块
- HTTP AutoIndex 模块
- Browser
- Charset*
- Empty GIF
- FastCGI
- Geo*
- Gzip
- HTTP Headers 模块
- HTTP Index 模块
- Http Referer 模块*
- HTTP Limit Zone 模块
- HTTP Limit Requests模块*
- Log
- Map*
- Memcached
- HTTP Proxy 模块
- Rewrite
- SSI模块
- User ID*
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基础模块的更多相关文章
- 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. ...
- Nginx 常用基础模块
目录 Nginx 常用基础模块 Nginx日志管理 nginx日志切割 Nginx目录索引 Nginx状态监控 Nginx访问控制 Nginx访问限制 Nginx 请求限制配置实战 Nginx Loc ...
- Nginx基础知识之————多模块(非覆盖安装、RTMP在线人数实例安装测试)
说明:已经安装好的nginx,需要添加一个未被编译安装的模块,需要怎么弄呢? 具体:这里以安装第三方nginx-rtmp-module和nginx-accesskey-2.0.3模块为例,nginx的 ...
- Nginx详解七:Nginx基础篇之Nginx官方模块
Nginx官方模块 --with-http_stub_status_module:Nginx的客户端状态,用于监控连接的信息,配置语法如下:配置语法:stub_status;默认状态:-配置方法:se ...
- 【推荐】Nginx基础知识之————多模块(非覆盖安装、RTMP在线人数实例安装测试)
说明:已经安装好的nginx,需要添加一个未被编译安装的模块,需要怎么弄呢? 具体:这里以安装第三方nginx-rtmp-module和nginx-accesskey-2.0.3模块为例,nginx的 ...
- 基于Nginx dyups模块的站点动态上下线并实现简单服务治理
简介 今天主要讨论一下,对于分布式服务,站点如何平滑的上下线问题. 分布式服务 在分布式服务下,我们会用nginx做负载均衡, 业务站点访问某服务站点的时候, 统一走nginx, 然后nginx根据一 ...
- Nginx 切片模块、断点续传
熟悉 CDN 行业主流技术的朋友应该都比较清楚,虽然 Nginx 近几年发展的如日中天,但是基本上没有直接使用它自带的 proxy_cache 模块来做缓存的,原因有很多,例如下面几个: 不支持多盘 ...
- Nginx基础整理
目录结构如下: Nginx基础知识 Nginx HTTP服务器的特色及优点 Nginx的主要企业功能 Nginx作为web服务器的主要应用场景包括: Nginx的安装 安装环境 快速安装命令集合 各个 ...
- nginx 的模块及处理流程
nginx的内部结构是由核心部分和一系列的功能模块所组成.这样划分是为了使得每个模块的功能相对简单,便于开发,同时也便于对系统进行功能扩展.这样的模块化设计类似于面向对象中的接口类,它增强了 ...
随机推荐
- CentOS7搭建git服务器
在CentOS7上搭建git服务器, 1.在Linux上安装git yum install -y git 验证是否安装成功,出现版本号即成功 git --version 2.创建版本库和用户 创建用户 ...
- Android笔记(四十六) Android中的数据存储——XML(二)PULL解析
PULL 的工作原理: XML pull提供了开始元素和结束元素.当某个元素开始时,可以调用parser.nextText()从XML文档中提取所有字符数据.当解析到一个文档结束时,自动生成EndDo ...
- 常用模块(collections模块,时间模块,random模块,os模块,sys模块,序列化模块,re模块,hashlib模块,configparser模块,logging模块)
认识模块 什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的 ...
- [nginx] nginx源码分析--监控检测模块
描述 HTTP监控检查,是nginx官网推荐使用的第三方模块 https://www.nginx.com/resources/wiki/modules/healthcheck/ https://git ...
- maven报错找不到依赖
遇到一个巨坑 跑公司的一个项目,拉下来代码,跑不起来.发现maven一直报这个错 was cached in the local repository,resolution will not be r ...
- P1600 天天爱跑步[桶+LCA+树上差分]
题目描述 小c同学认为跑步非常有趣,于是决定制作一款叫做<天天爱跑步>的游戏.<天天爱跑步>是一个养成类游戏,需要玩家每天按时上线,完成打卡任务. 这个游戏的地图可以看作一一棵 ...
- sql查询排序
ORDER BY _column1, _column2; /* _column1升序,_column2升序 */ ORDER BY _column1, _column2 DESC; /* ...
- Spring源码窥探之:ImportSelector
1. 编写实现ImportSelector的类 /** * @author 70KG * @Title: SelectImportBean * @Description: * @date 2018/7 ...
- 应该知道的linux命令
常用命令 1.在compose Bar下可以对多个服务器同时进行操作.选择To All Sessions 2. 查看JAVA进程: ps -ef | grep java ps auxf | grep ...
- mysql导出PDM文件步骤
打开mysql把表导出成sql文件(如:service.sql) powerdesigner:选择 File--->Reverse Engineer--->Database 重命名(mod ...