nginx中文文档-ngx_http_secure_link_module

此页面版本:2016-06-08
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配置参数启用。

secure_link

语法:secure_link expression
默认:—
上下文:http, server, location

定义一个包含变量的表达式,可以从中提取校验码和链接的有效期。见下面的例子。
从字符串中提取的校验码会与secure_link_md5指令定义的表达式的MD5哈希值比较。如果校验码不同,$secure_link变量置为空字符串。如果校验码相同,会检测链接的有效期。如果链接有有限的有效期,并且已经过期,$secure_link变量设置为“0”。否则设置为“1”。MD5哈希值通过请求中的base64编码传递。
如果链接有有效期,截止时间是从纪元(Thu, 01 Jan 1970 00:00:00 GMT)开始的秒数。值是在经过MD5哈希后的表达式中指定,并使用逗号分隔。如果没有定义截止时间,则链接无有效期。

secure_link_md5

语法:secure_link_md5 expression
默认:—
上下文:http, server, location

定义一个表达式,它的MD5哈希值用于与请求传递的值进行比对。
表达式应该包含安全的链接部分与一个secret部分。如果链接有有效期,表达式应该包含$secure_link_expires。
为了阻止未授权访问,表达式可以包含一些客户端的信息,例如地址和浏览器版本。
例子:

location /s/ {
    secure_link $arg_md5,$arg_expires;
    secure_link_md5 "$secure_link_expires$uri$remote_addr secret";

    if ($secure_link = "") {
        return 403;
    }

    if ($secure_link = "0") {
        return 410;
    }

    ...
}

“/s/link?md5=_e4Nc3iduzkWRm01TBBNYw&expires=2147483647”链接限制客户端访问“/s/link”,只有IP地址为127.0.0.1的客户端可以访问。这个链接同时限制了有效期到2038-01-19(GMT)。
在UNIX上,md5请求参数可以通过下面的方法得到:

echo -n '2147483647/s/link127.0.0.1 secret' | \
    openssl md5 -binary | openssl base64 | tr +/ -_ | tr -d =

secure_link_secret

语法:secure_link_secret word
默认:—
上下文:location

定义一个密语,用于检测请求链接的真实性。
完整的请求URI看起来如下:
/prefix/hash/link
hash是一个链接与密语经过MD5哈希计算后的16进制值,prefix是一个没有斜线的任一字符串。
如果请求链接通过了真实性检查,$secure_link变量设置为请求URI中提取的链接。否则$secure_link是空字符串。
例子:

location /p/ {
    secure_link_secret secret;

    if ($secure_link = "") {
        return 403;
    }

    rewrite ^ /secure/$secure_link;
}

location /secure/ {
    internal;
}

“/p/5e814704a28d9bc1914ff19fa0c4a00a/link”请求会内部重定向到“/secure/link”。
在UNIX上,这个例子中的哈希值可以这样得到:
echo -n 'linksecret' | openssl md5 -hex

内嵌变量


$secure_link
链接检查状态。具体的值取决于选择的操作模式。


$secure_link_expires
请求传递的链接的有效期。只用在secure_link_md5指令中。

nginx中文文档-ngx_http_scgi_module(I-T)

本文档包含以下指令:scgi_ignore_client_abort、scgi_ignore_headers、scgi_intercept_errors、scgi_limit_rate、scgi_max_temp_file_size、scgi_next_upstream、scgi_next_upstream_timeout、scgi_next_upstream_tries、scgi_no_cache、scgi_param、scgi_pass、scgi_pass_header、scgi_pass_request_body、scgi_pass_request_headers、scgi_read_timeout、scgi_request_buffering、scgi_send_timeout、scgi_store、scgi_store_access、scgi_temp_file_write_size、scgi_temp_path

scgi_ignore_client_abort

语法:scgi_ignore_client_abort on | off
默认:scgi_ignore_client_abort off
上下文:http, server, location

决定当客户端没有等待响应关闭了连接时,是否与SCGI服务器关闭连接。

scgi_ignore_headers

语法:scgi_ignore_headers field
默认:—
上下文:http, server, location

禁用处理SCGI服务器的响应头。下面的字段可以忽略:“X-Accel-Redirect”、“X-Accel-Expires”、“X-Accel-Limit-Rate”(1.1.6+)、“X-Accel-Buffering”(1.1.6+)、“X-Accel-Charset”(1.1.6+)、“Expires”、“Cache-Control”、“Set-Cookie”(0.8.44+)以及“Vary”(1.7.7+)。
如果不禁用,处理这些头域有以下效果:

  • “X-Accel-Expires”、“Expires”、“Cache-Control”、“Set-Cookie”和“Vary”设置响应的缓存参数。
  • “X-Accel-Redirect”执行指定URI的内部重定向。
  • “X-Accel-Limit-Rate”设置传输响应到客户端的速率。
  • “X-Accel-Buffering”启用或禁用响应的缓冲区。
  • “X-Accel-Charset”设置希望的响应字符编码。

scgi_intercept_errors

语法:scgi_intercept_errors on | off
默认:scgi_intercept_errors off
上下文:http, server, location

决定当SCGI服务器响应的返回码大于等于300是,应该传给客户端,还是重定向到nginx通过error_page指令进行处理。

scgi_limit_rate

语法:scgi_limit_rate rate
默认:scgi_limit_rate 0
上下文:http, server, location
版本:1.7.7+

限制从SCGI服务器读取响应的速度。rate定义为字节每秒。零值禁用限速。限制针对每一个请求,如果nginx同时打开两个请求,总速率为两倍的指定值。限制只有在SCGI服务器响应缓冲区启用时有效。

scgi_max_temp_file_size

语法:scgi_max_temp_file_size size
默认:scgi_max_temp_file_size 1024m
上下文:http, server, location

当启用了SCGI服务器响应缓冲区,整个请求不能放到由scgi_buffer_size和scgi_buffers指令设置的缓冲区中时,一部分响应会保存到临时文件中。这个指令设置了临时文件的最大大小。一次写入到临时文件的数据量由scgi_temp_file_write_size指令设置。
零值禁用响应缓冲区写入临时文件功能。
这个限制不会对请求会缓存或保存到磁盘的响应生效。

scgi_next_upstream

语法:scgi_next_upstream error | timeout | invalid_header | http_500 | http_503 | http_403 | http_404 | non_idempotent | off …
默认:scgi_next_upstream error timeout
上下文:http, server, location

指定哪些情况下请求会传给下一个服务器:
error
当与服务器建立连接、传递请求或读取响应头时发生了错误

timeout
当与服务器建立连接、传递请求或读取响应头时发生了超时

invalid_header
服务器返回了空的或无效的响应

http_500
服务器返回500错误码

http_503
服务器返回503错误码

http_403
服务器返回403错误码

http_404
服务器返回404错误码

non_idempotent
一般地,非幂等方法(POST、LOCK、PATCH)不会传给下一个服务器,如果请求已经发给了一个上游服务器(1.9.13+)。启用这个选项允许重试这些请求。

off
禁用将请求发送给下一个服务器的功能。

需要了解的是,传给下一个服务器只有在没返回客户端任何数据时可用。也就是说,如果错误或超时发生在传输响应中间,不能修复这个问题。
该指令同时定义了与服务器通信的不成功尝试。error、timeout和invalid_header总会被认为是不成功的尝试,即使它们没有在指令中定义。http_500和http_503只有在指令中定义时才会认为是不成功的尝试。http_403和http_404从不会认为是不成功的尝试。

scgi_next_upstream_timeout

语法:scgi_next_upstream_timeout time
默认:scgi_next_upstream_timeout 0
上下文:http, server, location
版本:1.7.5+

限制一个时间,在此期间请求可以传给下一个服务器。0值关闭这个限制。

scgi_next_upstream_tries

语法:scgi_next_upstream_tries number
默认:scgi_next_upstream_tries 0
上下文:http, server, location
版本:1.7.5+

限制尝试传递请求到下一个服务器的次数。0值关闭这个限制。

scgi_no_cache

语法:scgi_no_cache string
默认:—
上下文:http, server, location

定义哪些条件下响应不会被缓存。如果string参数至少有一个非空且不等于“0”的值,则响应不会缓存:

scgi_no_cache $cookie_nocache $arg_nocache$arg_comment;
scgi_no_cache $http_pragma    $http_authorization;

可以与scgi_cache_bypass指令一同使用。

scgi_param

语法:scgi_param parameter value [if_not_empty]
默认:—
上下文:http, server, location

设置应该传给SCGI服务器的参数。值可以包含文本、变量及它们的混合。这些指令当且仅当本等级中没有scgi_param指令定义时会继承自上一个等级。
标准的CGI环境变量会作为SCGI的头给出,参见scgi_params文件:

location / {
    include scgi_params;
    ...
}

如果指令定义了if_not_empty(1.1.11+),那么这个参数只有在非空的情况下会传给服务器:
scgi_param HTTPS $https if_not_empty;

scgi_pass

语法:scgi_pass address
默认:—
上下文:location, if in location

设置SCGI服务器的地址。地址可以定义为域名或IP地址和端口号:
scgi_pass localhost:9000;
或是一个UNIX-domain socket路径:
scgi_pass unix:/tmp/scgi.socket;
如果域名解析成多个地址,所有的地址会通过轮询的方式使用。地址可以定义为服务器组。

scgi_pass_header

语法:scgi_pass_header field
默认:—
上下文:http, server, location

允许传递被禁用的头域到客户端。

scgi_pass_request_body

语法:scgi_pass_request_body on | off
默认:scgi_pass_request_body on
上下文:http, server, location

指示原始请求体是否会传给SCGI服务器。参见scgi_pass_request_headers指令。

scgi_pass_request_headers

语法:scgi_pass_request_headers on | off
默认:scgi_pass_request_headers on
上下文:http, server, location

指示原始请求头是否传给SCGI服务器。参见scgi_pass_request_body指令。

scgi_read_timeout

语法:scgi_read_timeout time
默认:scgi_read_timeout 60s
上下文:http, server, location

定义从SCGI服务器读取响应的超时时间。超时时间为两次成功的读操作的时间,而不是整个响应的传输。如果在这期间SCGI服务器没有发送任何数据,连接将被关闭。

scgi_request_buffering

语法:scgi_request_buffering on | off
默认:scgi_request_buffering on
上下文:http, server, location
版本:1.7.11+

启用或禁用客户端请求体缓冲区。
当缓冲区启用时,整个请求体会先读取到缓冲区中,然后发送给SCGI服务器。
当缓冲区禁用时,请求体达到后会立即传给SCGI服务器。这种情况下,如果nginx已经发送请求体,请求就不能传给下一个服务器。
当HTTP1.1 chunked传输用来传输原始请求体,请求体会被缓冲不管指令的值。

scgi_send_timeout

语法:scgi_send_timeout time
默认:scgi_send_timeout 60s
上下文:http, server, location

设置传输请求到SCGI服务器的超时时间。超时时间为两次成功的写操作之间,不是整个请求传输。如果在此期间SCGI服务器没有收到任何数据,连接将被关闭。

scgi_store

语法:scgi_store on | off | string
默认:scgi_store off
上下文:http, server, location

开启将文件保存到磁盘功能。on参数保存文件到alias或root指令对应的路径下。off参数禁用保存文件。文件名可以使用string带变量:
scgi_store /data/www$original_uri;
修改时间是根据响应头中“Last-Modified”字段设置。响应首先写入到临时文件,然后重命名。从0.8.9版本开始临时文件和持久化文件可以放在不同的文件系统上。但是,需要知道的是,这种情况下文件会在两个文件系统中复制,而不是代价低的重命名操作。因此建议同时给出保存文件的位置和存放临时文件的目录位置,并放在同一个文件系统上。
这个指令可以用于创建静态不变的文件副本,例如:

location /images/ {
    root              /data/www;
    error_page        404 = /fetch$uri;
}

location /fetch/ {
    internal;

    scgi_pass         backend:9000;
    ...

    scgi_store        on;
    scgi_store_access user:rw group:rw all:r;
    scgi_temp_path    /data/temp;

    alias             /data/www/;
}

scgi_store_access

语法:scgi_store_access users:permissions
默认:scgi_store_access user:rw
上下文:http, server, location

设置新创建的文件和目录的访问权限,例如:
scgi_store_access user:rw group:rw all:r;
如果group或all的访问权限指定了,那么user的权限可以忽略:
scgi_store_access group:rw all:r;

scgi_temp_file_write_size

语法:scgi_temp_file_write_size size
默认:scgi_temp_file_write_size 8k|16k
上下文:http, server, location

当SCGI服务器响应缓冲区到临时文件功能启用时,限制每次写入临时文件的数据大小。默认情况下,大小由scgi_buffer_size和scgi_buffers指令设置的两个缓冲区限制。最大的临时文件大小由scgi_max_temp_file_size指令设置。

scgi_temp_path

语法:scgi_temp_path path [level1 [level2 [level3]]]
默认:scgi_temp_path scgi_temp
上下文:http, server, location

定义一个保存从SCGI服务器收到的数据的临时文件的目录。最多可以使用三层子目录层级指定目录。例如下面的配置
scgi_temp_path /spool/nginx/scgi_temp 1 2;
临时文件类似于:
/spool/nginx/scgi_temp/7/45/00000123457
参见scgi_cache_path指令的use_temp_path参数。