今天被倒霉迅雷吃了600G流量,然后去网上找解决方案,发现一般的限制referer根本不起作用,偶然间看到了一个模块,叫nginx_secure_link
上官方说明:
https://cloud.tencent.com/developer/section/1259375
secure_link
语法: secure_link md5_hash[,expiration_time]
默认: none
配置段: location
variables: yes
这个指令由uri中的MD5哈希值和过期时间组成. md5哈希必须由base64加密的,过期时间为unix时间.如果不加过期时间,那么这个连接永远都不会过期.
secure_link_md5
语法: secure_link_md5 secret_token_concatenated_with_protected_uri
默认: none
配置段: location
variables: yes
md5值对比结果,使用上面提供的uri、密钥、过期时间生成md5哈希值.如果它生成的md5哈希值与用户提交过来的哈希值一致,那么这个变量的值为1,否则为0
secure_link_secret
语法: secure_link_secret word
默认:
配置段: location
Reference: secure_link_secret
secure_link
语法: secure_link md5_hash[,expiration_time]
默认: none
配置段: location
variables: yes
这个指令由uri中的MD5哈希值和过期时间组成. md5哈希必须由base64加密的,过期时间为unix时间.如果不加过期时间,那么这个连接永远都不会过期.
secure_link_md5
语法: secure_link_md5 secret_token_concatenated_with_protected_uri
默认: none
配置段: location
variables: yes
md5值对比结果,使用上面提供的uri、密钥、过期时间生成md5哈希值.如果它生成的md5哈希值与用户提交过来的哈希值一致,那么这个变量的值为1,否则为0
secure_link_secret
语法: secure_link_secret word
默认:
配置段: location
Reference: secure_link_secret
nginx 0.8.50之后的版本已经使用secure_link_md5取代,不在多说.nginx 0.8.50之后的版本已经使用secure_link_md5取代,不在多说.
根据原理进行配置
下面是配置内容:(用于验证的参数由php处理)
nginx配置:
注意php里面加了一个urldecode
因为这个模块默认遇到中文是不需要urlencode的 如果encode的话会出错。
因为这个处理了好长时间。
应用结果:
验证是否生效: 更改一下参数
过了有效期后测试:
配置完毕,这个最大的用途就是用于下载服务器防倒链,图片服务器不可以用。
尤其是对于迅雷这种会从其他服务器采集资源的下载工具,为避免不必要的资源浪费,可以用这个进行限制。
缺点就是连接有有效期,必须在指定时间内点击才可以。如果一个网页上面带文件下载地址,而文章比较长,可能导致看到最后连接失效的问题。
Comments | NOTHING