nginx token 防盗链

2025-03-18 0 11

nginx token 防盗链

在Web开发和运维领域,防盗链是一个常见的需求。为了防止其他网站未经授权直接引用或下载资源(如图片、视频等),我们可以使用Nginx的Token防盗链功能。这种机制通过生成一个临时的有效Token,并将其附加到URL中,确保只有合法的请求能够访问资源。介绍几种实现Nginx Token防盗链的方法。

1. 简单的时间戳+密钥签名方案

最基础的Token防盗链方式是使用时间戳和密钥进行签名验证。这种方式简单易懂,且易于实现。

代码示例:

nginx
http {
    # 定义lua块,用于处理token验证
    lua<em>shared</em>dict cache 10m;</p>

<pre><code>init_by_lua_block {
    require "resty.md5"
}

server {
    location /protected/ {
        set $secret_key "your_secret_key";
        set $expire_time 3600;

        rewrite_by_lua_block {
            local uri = ngx.var.uri
            local args = ngx.req.get_uri_args()
            local token = args["token"]
            local timestamp = tonumber(args["t"])

            if not token or not timestamp then
                return ngx.exit(ngx.HTTP_FORBIDDEN)
            end

            -- 检查是否过期
            if os.time() > timestamp then
                return ngx.exit(ngx.HTTP_FORBIDDEN)
            end

            -- 生成校验值
            local hash = ngx.md5($secret_key .. timestamp)

            if hash ~= token then
                return ngx.exit(ngx.HTTP_FORBIDDEN)
            end
        }

        # 正常处理请求
        proxy_pass http://backend;
    }
}

}

2. 使用Nginx内置模块

Nginx自带了secure_link_module模块,可以方便地实现基于Token的防盗链。这个方法不需要额外安装第三方库,配置也相对简单。

配置示例:

nginx
http {
    server {
        location /protected/ {
            secure<em>link $arg</em>md5,$arg<em>expires;
            secure</em>link<em>md5 "$secure</em>link<em>expires$uri your</em>secret_key";</p>

<pre><code>        if ($secure_link = "") {
            return 403;
        }

        if ($secure_link = "0") {
            return 410;
        }

        proxy_pass http://backend;
    }
}

}

  • secure_link指令用于解析传入的参数。
  • secure_link_md5定义了Token的计算规则。
  • secure_link为空时返回403禁止访问;为0时表示链接已过期。

3. 结合后端服务动态生成Token

对于更复杂的场景,我们还可以让后端应用负责生成Token,并通过API接口提供给前端。这种方式使得Token的生成逻辑完全可控,并且可以根据业务需求灵活调整。

例如,在Node.js中生成Token:

javascript
const crypto = require('crypto');
function generateToken(url, expires) {
const secretKey = 'your_secret_key';
const md5 = crypto.createHash('md5');
md5.update(`${expires}${url}${secretKey}`);
return md5.digest('hex');
}

然后在HTML页面中构建带Token的URL:

html
<img src="/image.jpg?md5=${generateToken('/image.jpg', Date.now() + 3600)}&expires=${Date.now() + 3600}">

在Nginx中按照前面提到的方式进行验证即可。

以上就是关于Nginx Token防盗链的一些常见实现方法。根据实际应用场景的不同,可以选择最适合自己的方案。无论采用哪种方式,都建议定期检查并更新密钥,以保证安全性。

Image

1. 本站所有资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!cheeksyu@vip.qq.com
2. 本站不保证所提供下载的资源的准确性、安全性和完整性,资源仅供下载学习之用!如有链接无法下载、失效或广告,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或教程,您可以投稿发布,成功分享后有积分奖励和额外收入!
5.严禁将资源用于任何违法犯罪行为,不得违反国家法律,否则责任自负,一切法律责任与本站无关

源码下载