secure_link_secret 是轻量级防盗链方案,通过共享密钥与URI拼接后MD5取前16字符校验,配置简单、生效快,但无时效性与IP验证,密钥泄露则链接可长期复用。

用 secure_link_secret 是实现轻量级防盗链的最快方式,适合对时效性要求不高、但需快速阻断随意盗链的场景。它不依赖时间戳和复杂签名计算,只靠一个共享密钥做简单哈希校验,配置极简,生效迅速。
核心原理与限制
该指令对请求 URI(不含查询参数)和指定密钥拼接后做 MD5,再取 Base64 编码前 16 字节(即 128 位),截取其 Base64 URL 安全格式的前 16 个字符作为校验值。Nginx 内部自动完成比对,无需手动解码或处理过期逻辑。
注意:它不验证时间有效性,也不校验客户端 IP 或其他上下文;一旦密钥泄露或链接被截获,就可能被长期复用。
基础 Nginx 配置写法
在对应资源 location 块中加入以下两行即可:
secure_link_secret your_custom_key_2026;if ($secure_link = "") { return 403; }
其中 your_custom_key_2026 是你自定义的任意字符串,建议含年份/项目标识,便于后续轮换。Nginx 会自动将该密钥与 $uri(如 /files/report.pdf)拼接,生成校验值。
生成合法访问链接的方法
前端或后端需按固定规则生成带 md5 参数的 URL。以 /files/report.pdf 为例,密钥为 your_custom_key_2026:
- Linux 命令行(推荐测试用):
echo -n "/files/report.pdfyour_custom_key_2026" | md5sum | cut -c-16 | xargs -I{} echo "https://example.com/files/report.pdf?md5={}" - PHP 示例:
$uri = '/files/report.pdf';<br>$key = 'your_custom_key_2026';<br>$hash = substr(md5($uri . $key), 0, 16);<br>$url = "https://example.com{$uri}?md5={$hash}";
生成的链接形如:https://example.com/files/report.pdf?md5=9a3f7b2c1e8d4f6a
关键细节提醒
$uri 必须精确匹配——包括开头的 /,且不能带查询参数。例如配置在 location /files/ 下,实际请求路径是 /files/report.pdf,就不能写成 /report.pdf 或 /files/report.pdf?x=1。
不支持多密钥切换,若需轮换,必须同步更新所有已分发链接,并重启或重载 Nginx(nginx -s reload)使新密钥生效。
该方式适合内部系统、临时下载页、低敏感静态资源等场景,不适用于付费内容或需严格时效控制的业务。










