Nginx视频防盗链设置

文件服务器通过nginx部署,有大量的视频和图片文件,为了解决视频文件的播放授权,防盗链设置,因此需要通过视频url地址带上加密字符串和时间戳,到期后,文件访问失效,有效的提高视频文件的安全性,同时也避免其他网站盗链视频文件。

nginx安装secure_link模块

配置nginx.conf

location /video {
	root /resource/video;
	#这里配置了2个参数一个是st,一个是e
	secure_link $arg_st,$arg_e;
	#st的哈希格式为 自定义秘钥+url+e,e为时间戳单位s,url为请求地址
	secure_link_md5 customSecretKey$uri$arg_e;
	#这里我们的st是我们按照secure_link_md5的方式计算的哈希,secure_link会比对它计算的哈希值是否与我们的st参数一致
	if ($secure_link = "") {
		#资源不存在或哈希比对失败
		return 402;
	}
	if ($secure_link = "0") {
		#时间戳过期
		return 404;
	}
	if ($request_filename ~* ^.*?\.(mp4)$){
		#直接下载防止打开文件  格式: (mp4|txt|jpg)
		add_header Content-Disposition 'attachment;';
        #如不下载则屏蔽上方代码
	}
}

通过JAVA生成防盗链地址,代码如下:

String fullUrl ="http://192.168.0.110/video/demo.mp4";
String relativeUrl = fullUrl.substring(fullUrl.indexOf("/video/"));
String express = String.valueOf(System.currentTimeMillis() / 1000 + nginxExpress);
// +7200秒后地址失效
String authString = nginxSecretKey+relativeUrl+express;
String accessToken = Base64.encodeBase64URLSafeString(DigestUtils.md5Digest(authString.getBytes()));
String accessTokenUrl = fullUrl+"?st="+accessToken+"&e="+express;
return accessTokenUrl;

最终的格式为:

http://192.168.0.110/video/demo.mp4?st=-HPKxDy0aQkSJE3tXULl5w&e=1548816445?st=-HPKxDy0aQkSJE3tXULl5w&e=1548816445

### 如何配置 Nginx 实现防盗链 #### 一、理解防盗链概念 防盗链是一种保护资源不被其他站点非法使用的机制。通过验证请求来源的有效性来阻止外部网站直接访问受保护的内容。 #### 二、基本原理说明 当客户端浏览器加载页面上的图片或其他静态文件时,会向服务器发送HTTP GET 请求获取这些资源。此时可以在 Web Server (如Nginx) 上设置规则检查 Referer 字段中的 URL 是否合法,如果不匹配则拒绝提供该资源[^2]。 #### 三、具体操作指南 ##### 修改 Host 文件以便于本地测试环境搭建 为了模拟真实的网络情况并方便调试,在 Windows 系统下可以通过编辑 `C:\Windows\System32\drivers\etc` 目录下的 hosts 文件来进行域名解析映射。例如: ```plaintext 20.0.0.25 www.TX.top # 源主机 20.0.0.24 www.HH.top # 盗链主机 ``` 注意保存修改后的文件可能需要管理员权限,并且建议先备份原始版本以防出现问题[^1]。 ##### 编辑 Nginx 配置文件添加防盗链规则 进入 Nginx 安装目录找到 conf/nginx.conf 或者 site-available/default 文件(取决于操作系统),然后按照以下方式定义 location 块内的指令: ```nginx location ~* \.(gif|jpg|png)$ { valid_referers none blocked server_names *.TX.top; if ($invalid_referer) { return 403; } } ``` 这段代码表示对于所有以 .gif, .jpg 和 .png 结尾的文件只允许来自指定域名为*.TX.top 的请求访问;而对于不符合条件的情况返回 HTTP状态码403 Forbidden响应给用户代理程序[^3]。 完成上述更改之后记得重启 Nginx 使新策略生效: ```bash sudo service nginx restart ``` #### 四、高级应用案例分享 某些场景下除了简单地判断 referer 头部外还可以采用更复杂的手段比如基于时间戳加密签名等方式构建动态链接从而进一步增强安全性。这里给出一个例子用于生成带参数的时间敏感型下载地址[^4]: ```python import hashlib from datetime import timedelta,datetime def generate_signed_url(filename): expires = int((datetime.now() + timedelta(days=7)).timestamp()) sign_str = f"{filename}{expires}your_secret_key" md5_sign = hashlib.md5(sign_str.encode()).hexdigest() signed_url = f"http://example.com/path/to/{filename}?md5={md5_sign}&expires={expires}" return signed_url ``` 此函数可以根据传入的目标文件名创建有效期为一周的安全下载链接。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值