nginx中文文档-ngx_http_session_log_module

此页面版本:2016-06-08
ngx_http_session_log_module模块启用记录会话。

该模块为商业版。
示例配置
下面的配置根据请求客户端地址和“User-Agent”请求头,建立了一个会话日志和会话请求映射。

session_log_zone /path/to/log format=combined
                 zone=one:1m timeout=30s
                 md5=$binary_remote_addr$http_user_agent;

location /media/ {
    session_log one;
}

session_log_format

语法:session_log_format name string
默认:session_log_format combined “…”
上下文:http

指定日志的输出格式。$body_bytes_send变量的值是聚合一个session的所有请求的值。其他的变量在会话第一个请求中可用。

session_log_zone

语法:session_log_zone path zone=name:size [format=format] [timeout=time] [id=id] [md5=md5]
默认:—
上下文:http

设置日志路径,并配置用于存储当期活动的会话的共享内存区域。
一个会话被认为是活跃的,只要上一次请求到现在没有超过指定的超时时间(默认是30秒)。当会话不再活动,会被写入到日志。
id参数标示了哪个请求映射到哪个会话。id参数是16进制的MD5哈希值(例如,从cookie中的变量获取)。如果参数没有指定,或不是一个正确的md5值,nginx会从md5参数中计算MD5哈希值,并用这个哈希创建一个新的会话。id和md5参数都可以包含变量。
format参数设置了session_log_format指令设置的日志格式的定制会话。如果format没有指定,预定义“combined”格式会使用。

session_log

语法:session_log name | off
默认:session_log off
上下文:http, server, location

启用指定的会话日志。特殊值off取消继承自上级配置中session_log指令。

内嵌变量

ngx_http_session_log_module模块支持两个内嵌变量:


$session_log_id
当前会话ID


$session_log_binary_id
当前会话ID的二进制形式(16字节)

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指令中。