我是靠谱客的博主 岁月静好,这篇文章主要介绍宝塔安装nginx的ngx_http_secure_link_module模块对视频切片鉴权,现在分享给大家,希望可以做个参考。

在宝塔面板中安装ngx_http_secure_link_module模块并配置Nginx鉴权,最核心的一点是:secure_link模块是Nginx官方模块,宝塔默认安装的Nginx并未包含它,需要你通过“编译安装”的方式重新添加该模块

下面是在宝塔环境中逐步实现这一功能的具体操作方法。

第一步:编译安装Nginx并添加模块

由于宝塔面板中通过“极速安装”的Nginx不包含secure_link模块,你需要将其卸载后,使用“编译安装”的方式重新安装,并在编译参数中添加上该模块。

  1. 卸载现有Nginx:登录宝塔面板,进入“软件商店”。找到已安装的Nginx,点击右侧的“卸载”按钮,将其从服务器中移除。

  2. 重新编译安装Nginx:在“软件商店”的“运行环境”分类中,找到Nginx,点击“安装”。在弹出的安装窗口中,关键一步是选择“编译安装”。在选择版本时,搜索结果中有用户反馈,最新的Nginx 1.24版本在编译时可能与某些Lua模块存在兼容性问题导致报错。为了更稳定地完成安装,建议选择稳定版,如Nginx 1.22或1.20版本。选择好版本后,点击“添加自定义模块”,在弹出的窗口中填写以下信息:模块名称:http_secure_link_module (或任意你容易识别的名称)模块参数:--with-http_secure_link_module确认后,点击“提交”并开始安装。宝塔面板会自动完成后续的编译和安装工作。

  3. 验证安装:安装完成后,建议你通过宝塔面板的“终端”或在你的SSH客户端中执行以下命令来确认模块是否已成功添加:bashnginx -V 2>&1 | grep secure_link如果输出信息中包含 --with-http_secure_link_module,则表示模块已安装成功。

第二步:配置Nginx鉴权规则

模块安装成功后,接下来就需要在你网站的Nginx配置文件中添加secure_link的鉴权规则。这些规则定义了服务器如何验证请求中的hashexpires参数。

  1. 在宝塔面板左侧菜单栏点击“网站”,进入你想要配置的网站的管理页面。

  2. 点击该网站对应的“配置文件”按钮,进入Nginx配置编辑界面。

  3. 在 server 块内,添加或修改一个 location 块来匹配你需要保护的文件类型(例如你之前提到的 .ts 视频切片或 .mp4 文件)。以下是一个配置示例:

nginx

# 示例:保护 /hls/ 目录下的所有 .ts 和 .mp4 文件
location ~* \.(ts|mp4)$ {
    # 引用的 $arg_md5 和 $arg_expires 分别对应URL中的 hash 和 expires 参数
    secure_link $arg_hash,$arg_expires;
    # 生成签名的规则:密钥 + 文件路径 + 过期时间戳
    # 注意:这个密钥 "your_secret_key_here" 必须与后端程序生成hash时使用的密钥完全一致
    secure_link_md5 "your_secret_key_here$uri$arg_expires";
    
    # 鉴权逻辑
    # $secure_link 变量为空字符串,表示签名校验失败(如参数错误或签名不匹配)
    if ($secure_link = "") {
        return 403;
    }
    # $secure_link 变量为 "0",表示签名校验通过但链接已过期
    if ($secure_link = "0") {
        return 410;
    }
    # 鉴权通过,Nginx正常提供文件服务
}

配置说明:

  • secure_link $arg_hash,$arg_expires;:这行指令告诉Nginx,从请求的查询参数中提取名为hash和expires的值来进行校验。

  • secure_link_md5 "your_secret_key_here$uri$arg_expires";:这是最核心的校验规则。Nginx会根据这个字符串重新计算MD5值,并与URL中的hash参数进行比对。其中$uri是当前请求的文件路径(如/hls/srv3/.../seg-193-v1-a1.ts),$arg_expires是URL中的过期时间戳。

  • 鉴权变量:$secure_link = "":校验失败,通常是签名不正确。$secure_link = "0":签名正确,但链接已过期。$secure_link = "1":鉴权通过,可以正常访问资源。

验证与测试

配置完成后,点击“保存”按钮。为了确保配置生效,需要重启Nginx服务:在软件商店的Nginx管理页面或通过SSH执行 nginx -s reload 命令。

为了验证配置是否生效,你可以使用一个简单的测试方法。在你的服务器(假设域名为 example.com)上有一个文件 /hls/test.ts,密钥为 mysecret,有效期为10秒。

你可以在终端中使用以下命令生成一个合法的链接并测试:

bash

# 假设有效期是10秒后
EXPIRES=$(($(date +%s) + 10))
# 生成签名
HASH=$(echo -n "mysecret/hls/test.ts${EXPIRES}" | openssl md5 -hex | awk '{print $2}')
# 组合成完整URL
echo "http://example.com/hls/test.ts?hash=${HASH}&expires=${EXPIRES}"

将这个生成的URL在10秒内访问应该可以成功下载文件;10秒后再次访问,服务器应返回HTTP 410 Gone状态码。如果直接访问 http://example.com/hls/test.ts,则会返回403 Forbidden。

几个重要提醒

  • 密钥必须一致:Nginx配置中的密钥(secure_link_md5)必须与你的后端程序(负责生成带hash值下载链接的程序)使用的密钥完全相同,否则所有请求都会被拒绝。

  • 过期时间戳单位:expires参数使用的是Unix时间戳(秒为单位),请确保你的后端程序生成的是正确格式。

  • 程序化生成链接:对于.ts切片文件,你需要在后端(如PHP、Node.js等)动态生成.m3u8播放列表时,为每一个切片URL附带上正确的hash和expires参数。

最后

以上就是岁月静好最近收集整理的关于宝塔安装nginx的ngx_http_secure_link_module模块对视频切片鉴权的全部内容,更多相关宝塔安装nginx内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(78)

评论列表共有 0 条评论

立即
投稿
返回
顶部