• nginx基础模块


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

    基础模块

    http核心模块

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

    http upstream 模块

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

    配置范例:

    upstream backend  {
      server backend1.example.com weight=5;
      server backend2.example.com:8080;
      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/24;
     allow   10.1.1.0/16;
     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[0] ;
    print crypt($pw,$pw)."
    ";

    然后执行

    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.0;
    modern_browser opera 9.0;
    modern_browser safari 413;
    
    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.1;
    modern_browser opera 8.0;
    modern_browser safari 413;
    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-1251;
    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-1251 {
      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:9000;
      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:9000 $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  200;

    Geo模块

    摘要

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

    配置示例:

    geo  $geo  {
    
      default          0;
      127.0.0.1/32     2;
      192.168.1.0/24   1;
      10.1.0.0/16      1;
    
    }

    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/24     us;
       127.0.0.1/32     ru;
       10.1.0.0/16      ru;
       192.168.1.0/24   uk;
     }

    在文件conf / geo.conf中:

    10.2.0.0/16      ru;
     192.168.2.0/24   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  1000;
     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  1000;
     gzip_buffers     4 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     0;
     expires     -1;
     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年。

    -1

    指定“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.0.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   403;
      }
    
    }

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

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

    定义一个叫“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=5;
            }

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

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

    limit_req   zone=one  burst=5  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          0;
     
      example.com      1;
      *.example.com    1;
      test.com         2;
      *.test.com       2;
      .site.com        3;
    
    }

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

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

    而不是两个条目

    example.com    1;
    *.example.com  1;

    我们只能使用一个

    .example.com   1;

    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:11211;
     default_type     text/html;
     error_page       404 = /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/$1  break;
    }
    if ($http_cookie ~* "id=([^;] +)(?:;|$)" ) {
     set  $id  $1;
    }
    if ($request_method = POST ) {
     return 405;
    }
    if (!-f $request_filename) {
     break;
     proxy_pass  http://127.0.0.1;
    }
    if ($slow) {
     limit_rate  10k;
    }
    if ($invalid_referer) {
     return   403;
    }

    内置变量$ 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 $1;
     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/(.*)..*$  $1/mp3/$2.mp3  last;
    rewrite  ^(/download/.*)/audio/(.*)..*$  $1/mp3/$2.ra   last;
    return   403;

    但是如果我们将这些指令放在location / download /中,那么有必要用“break”替换标志“last”,否则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;

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

    /photos/123456 

    重定向到:

    /path/to/photos/12/1234/123456.png 

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

    rewrite  "/photos/([0-9] {2})([0-9] {2})([0-9] {2})" /path/to/photos/$1/$1$2/$1$2$3.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   403;
     }
     if ($slow) {
     limit_rate  10k;
     }
     rewrite  ^/(download/.*)/media/(.*)..*$  /$1/mp3/$2.mp3  break;
    }

    将被编译成这个序列:

     variable $forbidden
     checking to zero
     recovery 403
     completion of entire code
     variable $slow
     checking to zero
     checkings of regular expression
     copying "/"
     copying $1
     copying "/mp3/"
     copying $2
     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/(.*)..*$  /$1/mp3/$2.mp3  break;

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

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

    然后序列将如下所示:

     checking regular expression
     copying $1
     copying "/mp3/"
     copying $2
     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

  • 相关阅读:
    php -- php数组相关函数
    php -- 数组排序
    php -- in_array函数
    php -- 魔术方法 之 删除属性:__unset()
    无符号整型与有符号整型相运算规则
    N个节点的二叉树有多少种形态
    getopt_long
    typedef
    约瑟夫环问题算法(M)
    C语言基础
  • 原文地址:https://www.cnblogs.com/jiangxiaobo/p/11109415.html
Copyright © 2020-2023  润新知