Nginx官方文档(三十一)【ngx_http_secure_link_module|ngx_http_session_log_module】

ngx_http_secure_link_module

ngx_http_secure_link_module 模块(0.7.18)用于检查请求链接的真实性,保护资源免受未经授权的访问,并限制链接有效时长。

通过将请求中传递的校验和值与为请求计算的值进行比较,验证所请求链接的真实性。如果链接有效时长有限且时间已过,则链接将被视为过期。这些检查的状态在 $secure_link 变量中可用。

该模块提供两种替代操作模式。第一种模式由 secure_link_secret 指令启用,用于检查请求链接的真实性以及保护资源免受未经授权的访问。第二种模式(0.8.50)由 secure_linksecure_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 哈希值使用 base64url 编码。

如果链接的有效时长有限,则自 Epoch(Thu, 01 Jan 1970 00:00:00 GMT)以秒为单位设置到期时间。该值在 MD5 哈希之后的表达式中指定,并以逗号分隔。请求中传递的到期时间可通过 $secure_link_expires 变量获得,以便在 secure_link_md5 指令中使用。如果未指定到期时间,则链接将有无限有效时长。

secure_link_md5

-说明
语法secure_link_md5 expression;
默认——
上下文http、server、location

定义一个将为其计算 MD5 哈希值并与请求中传递的值进行比较的表达式。

表达式应包含链接(资源)的保护部分和秘密部分。如果链接的有效市场为有限,则表达式还应包含 $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 链接限制了 IP 地址为 127.0.0.1 的客户端对 /s/link 访问。该链接的有效时长有限,直到 2038 年 1 月 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;
默认——
上下文http、server、location

定义一个用于检查所请求链接真实性的暗语(word)。

请求链接的完整 URI 如下所示:

/prefix/hash/link

其中 hash 是针对链接和暗语相连计算的 MD5 哈希的十六进制表示,而 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 指令。

原文档


ngx_http_session_log_module

ngx_http_session_log_module 模块启用会话日志(多个 HTTP 请求的聚合),而不是单个 HTTP 请求。

该模块作为我们商业订阅的一部分提供。

示例配置

以下配置根据请求客户端的地址和 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

-说明
语法session_log name | off;
默认session_log off;
上下文http、server、location

允许使用指定的会话日志。特殊值 off 取消从先前配置级别继承的所有 session_log 指令。

session_log_format

-说明
语法session_log_format name string ...;
默认session_log_format combined “…”;
上下文http

指定日志的输出格式。$body_bytes_sent 变量的值聚合在会话的所有请求中。可用于记录的所有其他变量的值对应于会话中的第一个请求。

session_log_zone

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

设置日志文件的路径,并配置用于存储当前活动会话的共享内存区域。

只要会话中的最后一个请求经过的时间不超过指定的 timeout(默认为 30 秒),会话就被视为活动状态。会话不再处于活动状态后将被写入日志。

id 参数标识请求映射到的会话。id 参数设置为 MD5 哈希的十六进制形式(例如,使用变量从 cookie 中获取)。如果未指定此参数或不是有效的 MD5 哈希,则 nginx 将根据 md5 参数的值计算 MD5 哈希,并使用此哈希创建新会话。idmd5 参数都可以包含变量。

format 参数设置 session_log_format 指令配置的自定义会话日志格式。如果未指定 format,则使用预定义的 combined格式。

内嵌变量

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

  • $session_log_id

    当前会话 ID

  • $session_log_binary_id

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

原文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值