Nginx连接校验模块

TrumanWong
6/25/2024
TrumanWong

模块名称:ngx_http_secure_link_module

ngx_http_secure_link_module模块(Nginx 0.7.18开始)用于检查请求链接的真实性,保护资源免遭未经授权的访问,并限制链接寿命。常用于访问及文件下载的防盗链的实现。

该模块不是默认构建的,需要通过 --with-http_secure_link_module 配置参数来启用。

原理

该模块功能的实现原理如下:

示例

Nginx配饰示例如下:

server {
    ...
    location /download { 
      secure_link $arg_secret_valid,$arg_secret_time;
      secure_link_md5 trumanwong$uri$arg_secret_time;
      if ($secure_link = "") {
        return 403;
      }
      if ($secure_link = "0") {
        return 405;
      }
      ...
    }
    ...
}

PHP配置示例如下:

<?php
// 密钥
$secret = 'trumanwong';
// 被保护的真实连接
$path = "/download/example.zip";
// 访问超时时间
$expire = time() + 10;
// 将访问密钥、访问路径、超时时间加密
$md5 = base64_encode(md5($secret . $path . $expire, true));
// 特殊字符“+”和“/”的处理
$md5 = strtr($md5, '+/', '-_');
// 特殊字符“=”的处理
$md5 = str_replace('=', '', $md5);
// 新的访问连接
$url = "https://trumanwl.com{$path}?secret_valid={$md5}&secret_time={$expire}";
echo '<a href="' . $url . '">example.zip</a>';
?>