nginx 多组件安装及secure_link配置与文件下载防盗链的使用
2019-08-10 20:51:14
1062 次阅读
0 个评论
防盗链的重要性无需多言,nginx本身提供了secure_link来完成防盗链功能,那么java如何来与secure_link交互呢?
安装nginx
#下载nginx 到 /software
安装nginx
#下载nginx 到 /software
tar xzvf nginx.tar.gz
#进入nginx 目录
./configure
.make & make install
安装nginx secure_link
./configure --with-http_secure_link_module \ --prefix=/usr/local/nginx --with-http_stub_status_module
#先安装secure link 其实这个组件nginx本身就有,只不过是默认不安装罢了
安装其他nginx组件
#这里我们随意选择一个组件
#选择nginx-rtmp-module
#这里看下nginx-rtmp-module官方提供的安装方法
./configure --add-module=/path/to/nginx-rtmp-module
make
make install
#首先如果按照这种方式安装后,你会发现nginx只有rtmp这个组件而刚刚安装的secure_link被覆盖了
#我们选择一种非覆盖的安装方式
/usr/local/nginx/sbin/nginx -V
#查看nginx信息中注意 configure arguments:--with-http_secure_link_module --prefix=/usr/local/nginx/ --with-http_stub_status_module
#复制这条 --with-http_secure_link_module --prefix=/usr/local/nginx/ --with-http_stub_status_module
#下载nginx-rtmp-module到 /software
#进入/software/nginx目录
./configure --with-http_secure_link_module --prefix=/usr/local/nginx/ --with-http_stub_status_module --add-module=/software/nginxrtmp/nginx-rtmp-module-master
#注意--add开始就是nginx-rtmp-module组件的安装命令了
#--add-module=这里是nginx-rtmp-module的文件目录,下载组件后tar xzvf解压后得到的目录
make
#这里make后就不要make install了 否则就又把 secure_link等已安装的老组件覆盖了
#继续看下面
#因为后面我们要覆盖sbin/nginx文件,所以我们先把他备份出来
service nginx stop
#这里我吧nginx做成服务了,如果你没有做成服务 那么用 sbin/nginx -s stop命令来停止nginx
cp /usr/local/nginx/sbin/nginx /usr/loca/nginx/sbin/nginx.back
#然后我们把make好的/software/nginx目录下的文件拿出来覆盖 sbin/nginx
pwd
#/software/nginx/nginx-1.12.0
cp ./objs/nginx /usr/local/nginx/sbin/nginx?
service nginx start
#大功告成 ,再次执行 nginx -V
======================================================================
nginx version: nginx/1.12.0
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC)?
built with OpenSSL 1.0.1e-fips 11 Feb 2013
TLS SNI support enabled
configure arguments: --with-http_secure_link_module --prefix=/usr/local/nginx/ --with-http_stub_status_module --add-module=/software/nginxrtmp/nginx-rtmp-module-master
Secoure_link在nginx中的设置
在server节点增加以下location配置
location / {
root /resource/video;
secure_link $arg_st,$arg_e;
#这里配置了2个参数一个是st,一个是e
secure_link_md5 abc$uri$arg_e;
#st的哈希格式为 secret+url+e,e为时间戳单位s,url为请求地址
#这里我们的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;';
}
}
#设置402,404的跳转
#在http节点
error_page 400 = 404.html; #跳转400页面
error_page 404 = http://www.baidu.com;#跳转404页面
好了到这里我们看看访问url的格式是什么
http://127.0.0.1/abc.mp4?st=xxxx&s=xxx
地址中st是根据时间戳以及文件名计算出来的,那么我们用java做一个类来提供对它的计算
JAVA计算防盗链地址
使用了commons-codec-1.10.jar包,大家自行下载
/**
* 防盗链资源下载地址
*
* @author Allen 2017年6月5日
*
*/
public class SourceDownloadPath {
static Logger logger = Logger.getLogger(SourceDownloadPath.class);
/** class Constant **/
final static String HTTP = "http://";
final static String ST = "?st=";
final static String E = "&e=";
final static String F = "/";
final static String WARN = "path参数最好带上 \"/\" ,例: \"/abc.mp4\" ";
public static String execute(String path) {
if (path.indexOf(F) == -1) {
path = StringUtils.append(F,path);
logger.warn(WARN);
}
String time = String.valueOf(System.currentTimeMillis() / 1000 + Long.valueOf(Conf.VIDEO_DOWNLOAD_INVALID));
// +n代表n秒后地址失效
String md5 = Base64
.encodeBase64URLSafeString(DigestUtils.md5(StringUtils.append(Conf.VIDEO_DOWNLOAD_SECRET, path, time)));
return StringUtils.append(HTTP, Conf.SERVER_IP, path, ST, md5, E, time);
}
public static void main(String[] args) {
System.out.println(execute("abc.mp4"));
}
}
#执行结果
[WARN ] 2017-06-07 16:12:14(0)
--> [main] com.api.util.SourceDownloadPath.execute(SourceDownloadPath.java:27): path参数最好带上 "/" ,例: "/abc.mp4" ?
http://127.0.0.1/abc.mp4?st=s-UPx9up2DH_MpVse4vT-w&e=1496823314
public class StringUtils {
public static String append(String... params) {
return Arrays.asList(params).stream().collect(Collectors.joining());
}
}
结束
就到这里了,我们对nginx组件非覆盖安装以及secure_link组件的配置,java生成防盗链的method都进行了展示
00
相关话题
- FastDFS集成Nginx并开启图片防盗链
- nginx禁止访问文件或目录的配置方法及location指令的uri匹配规则
- SpringBoot自定义配置文件及读取配置文件
- spring配置文件中bean的属性name与id的区别
- Nginx 设置 X-Accel-Redirect 控制文件下载
- 基于Nginx XSendfile+SpringMVC进行文件下载
- 前端图片压缩与上传OSS组件
- SpringBoo使用jasypt加密配置文件
- Spring MVC 文件下载
- Apache的commons-net实现FTP的文件上传下载
- 使用@Configuration注解来代替Spring的bean配置
- spring-data-redis与Jedis整合配置
- Nginx配置WebSocket负载均衡
- Nginx支持字体文件
- Nginx配置http和https共存