nginx 多组件安装及secure_link配置与文件下载防盗链的使用(JAVA)

nginx 多组件安装及secure_link配置与文件下载防盗链的使用(JAVA)



前言

防盗链的重要性无需多言,nginx本身提供了secure_link来完成防盗链功能,那么java如何来与secure_link交互呢?

安装nginx

[html]  view plain  copy
  1. #下载nginx 到 /software  
  2. tar xzvf  nginx.tar.gz  
  3. #进入nginx 目录  
  4. ./configure   
  5. .make & make install   

安装nginx secure_link

[html]  view plain  copy
  1. ./configure --with-http_secure_link_module \ --prefix=/usr/local/nginx --with-http_stub_status_module  
  2. #先安装secure link 其实这个组件nginx本身就有,只不过是默认不安装罢了  

安装其他nginx组件

[html]  view plain  copy
  1. #这里我们随意选择一个组件  
  2. #选择nginx-rtmp-module  
  3. #这里看下nginx-rtmp-module官方提供的安装方法  
  4.   
  5. ./configure --add-module=/path/to/nginx-rtmp-module  
  6. make  
  7. make install  
[html]  view plain  copy
  1. #首先如果按照这种方式安装后,你会发现nginx只有rtmp这个组件而刚刚安装的secure_link被覆盖了  
  2. #我们选择一种非覆盖的安装方式  
  3.   
  4. /usr/local/nginx/sbin/nginx -V  
  5.   
  6. #查看nginx信息中注意 configure arguments:--with-http_secure_link_module --prefix=/usr/local/nginx/ --with-http_stub_status_module  
  7. #复制这条 --with-http_secure_link_module --prefix=/usr/local/nginx/ --with-http_stub_status_module  
[html]  view plain  copy
  1. #下载nginx-rtmp-module到 /software   
  2. #进入/software/nginx目录  
  3.   
  4. ./configure --with-http_secure_link_module --prefix=/usr/local/nginx/ --with-http_stub_status_module --add-module=/software/nginxrtmp/nginx-rtmp-module-master  
  5.   
  6. #注意--add开始就是nginx-rtmp-module组件的安装命令了  
  7. #--add-module=这里是nginx-rtmp-module的文件目录,下载组件后tar xzvf解压后得到的目录  
  8.   
  9. make  
  10.   
  11. #这里make后就不要make install了 否则就又把 secure_link等已安装的老组件覆盖了  
  12. #继续看下面  
  13. #因为后面我们要覆盖sbin/nginx文件,所以我们先把他备份出来  
  14.   
  15. service nginx stop  
  16.   
  17. #这里我吧nginx做成服务了,如果你没有做成服务 那么用 sbin/nginx -s stop命令来停止nginx  
  18.   
  19. cp /usr/local/nginx/sbin/nginx /usr/loca/nginx/sbin/nginx.back  
  20.   
  21. #然后我们把make好的/software/nginx目录下的文件拿出来覆盖 sbin/nginx  
  22.   
  23. pwd  
  24.   
  25. #/software/nginx/nginx-1.12.0  
  26.   
  27. cp ./objs/nginx /usr/local/nginx/sbin/nginx   
  28. service nginx start  
  29.   
  30. #大功告成 ,再次执行 nginx -V  
  31. ======================================================================  
  32. nginx version: nginx/1.12.0  
  33. built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC)   
  34. built with OpenSSL 1.0.1e-fips 11 Feb 2013  
  35. TLS SNI support enabled  
  36. 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配置
[html]  view plain  copy
  1. location / {  
  2.          root /resource/video;   
  3.          secure_link $arg_st,$arg_e;  
  4.          #这里配置了2个参数一个是st,一个是e  
  5.   
  6.          secure_link_md5 abc$uri$arg_e;   
  7.          #st的哈希格式为 secret+url+e,e为时间戳单位s,url为请求地址  
  8.   
  9.          #这里我们的st是我们按照secure_link_md5的方式计算的哈希,secure_link会比对它计算的哈希值是否与我们的st参数一致   
  10.          if ($secure_link = "") {  
  11.             #资源不存在或哈希比对失败  
  12.             return 402;  
  13.          }  
  14.          if ($secure_link = "0") {  
  15.             #时间戳过期  
  16.             return 404;  
  17.          }  
  18.      if ($request_filename ~* ^.*?\.(mp4)$){  
  19.              #直接下载防止打开文件  格式: (mp4|txt|jpg)  
  20.         add_header Content-Disposition 'attachment;';  
  21.       }  
  22.       }  
  23.   
  24.       #设置402,404的跳转  
  25.       #在http节点  
  26.     error_page 400 = 404.html; #跳转400页面  
  27.     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包,大家自行下载
[html]  view plain  copy
  1. /**  
  2.  * 防盗链资源下载地址  
  3.  *   
  4.  * @author Allen 2017年6月5日  
  5.  *  
  6.  */  
  7. public class SourceDownloadPath {  
  8.     static Logger logger = Logger.getLogger(SourceDownloadPath.class);  
  9.     /** class Constant **/  
  10.     final static String HTTP = "http://";  
  11.     final static String ST = "?st=";  
  12.     final static String E = "&e=";  
  13.     final static String F = "/";  
  14.     final static String WARN = "path参数最好带上 \"/\" ,例: \"/abc.mp4\" ";  
  15.   
  16.     public static String execute(String path) {  
  17.         if (path.indexOf(F) == -1) {  
  18.             path = StringUtils.append(F,path);  
  19.             logger.warn(WARN);  
  20.         }  
  21.         String time = String.valueOf(System.currentTimeMillis() / 1000 + Long.valueOf(Conf.VIDEO_DOWNLOAD_INVALID));   
  22.                 // +n代表n秒后地址失效  
  23.         String md5 = Base64  
  24.                 .encodeBase64URLSafeString(DigestUtils.md5(StringUtils.append(Conf.VIDEO_DOWNLOAD_SECRET, path, time)));  
  25.         return StringUtils.append(HTTP, Conf.SERVER_IP, path, ST, md5, E, time);  
  26.     }  
  27.   
  28.     public static void main(String[] args) {  
  29.         System.out.println(execute("abc.mp4"));  
  30.   
  31.     }  
  32. }  
  33. #执行结果   
  34. [WARN ] 2017-06-07 16:12:14(0)  
  35. --> [main] com.api.util.SourceDownloadPath.execute(SourceDownloadPath.java:27): path参数最好带上 "/" ,例: "/abc.mp4"    
  36. http://127.0.0.1/abc.mp4?st=s-UPx9up2DH_MpVse4vT-w&e=1496823314  
[html]  view plain  copy
  1. public class StringUtils {   
  2.     public static String append(String... params) {  
  3.         return Arrays.asList(params).stream().collect(Collectors.joining());  
  4.     }  
  5. }  

结束

就到这里了,我们对nginx组件非覆盖安装以及secure_link组件的配置,java生成防盗链的method都进行了展示。希望可以帮到大家


防盗链的重要性无需多言,nginx本身提供了secure_link来完成防盗链功能,那么java如何来与secure_link交互呢?

安装nginx

[html]  view plain  copy
  1. #下载nginx 到 /software  
  2. tar xzvf  nginx.tar.gz  
  3. #进入nginx 目录  
  4. ./configure   
  5. .make & make install   

安装nginx secure_link

[html]  view plain  copy
  1. ./configure --with-http_secure_link_module \ --prefix=/usr/local/nginx --with-http_stub_status_module  
  2. #先安装secure link 其实这个组件nginx本身就有,只不过是默认不安装罢了  

安装其他nginx组件

[html]  view plain  copy
  1. #这里我们随意选择一个组件  
  2. #选择nginx-rtmp-module  
  3. #这里看下nginx-rtmp-module官方提供的安装方法  
  4.   
  5. ./configure --add-module=/path/to/nginx-rtmp-module  
  6. make  
  7. make install  
[html]  view plain  copy
  1. #首先如果按照这种方式安装后,你会发现nginx只有rtmp这个组件而刚刚安装的secure_link被覆盖了  
  2. #我们选择一种非覆盖的安装方式  
  3.   
  4. /usr/local/nginx/sbin/nginx -V  
  5.   
  6. #查看nginx信息中注意 configure arguments:--with-http_secure_link_module --prefix=/usr/local/nginx/ --with-http_stub_status_module  
  7. #复制这条 --with-http_secure_link_module --prefix=/usr/local/nginx/ --with-http_stub_status_module  
[html]  view plain  copy
  1. #下载nginx-rtmp-module到 /software   
  2. #进入/software/nginx目录  
  3.   
  4. ./configure --with-http_secure_link_module --prefix=/usr/local/nginx/ --with-http_stub_status_module --add-module=/software/nginxrtmp/nginx-rtmp-module-master  
  5.   
  6. #注意--add开始就是nginx-rtmp-module组件的安装命令了  
  7. #--add-module=这里是nginx-rtmp-module的文件目录,下载组件后tar xzvf解压后得到的目录  
  8.   
  9. make  
  10.   
  11. #这里make后就不要make install了 否则就又把 secure_link等已安装的老组件覆盖了  
  12. #继续看下面  
  13. #因为后面我们要覆盖sbin/nginx文件,所以我们先把他备份出来  
  14.   
  15. service nginx stop  
  16.   
  17. #这里我吧nginx做成服务了,如果你没有做成服务 那么用 sbin/nginx -s stop命令来停止nginx  
  18.   
  19. cp /usr/local/nginx/sbin/nginx /usr/loca/nginx/sbin/nginx.back  
  20.   
  21. #然后我们把make好的/software/nginx目录下的文件拿出来覆盖 sbin/nginx  
  22.   
  23. pwd  
  24.   
  25. #/software/nginx/nginx-1.12.0  
  26.   
  27. cp ./objs/nginx /usr/local/nginx/sbin/nginx   
  28. service nginx start  
  29.   
  30. #大功告成 ,再次执行 nginx -V  
  31. ======================================================================  
  32. nginx version: nginx/1.12.0  
  33. built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC)   
  34. built with OpenSSL 1.0.1e-fips 11 Feb 2013  
  35. TLS SNI support enabled  
  36. 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配置
[html]  view plain  copy
  1. location / {  
  2.          root /resource/video;   
  3.          secure_link $arg_st,$arg_e;  
  4.          #这里配置了2个参数一个是st,一个是e  
  5.   
  6.          secure_link_md5 abc$uri$arg_e;   
  7.          #st的哈希格式为 secret+url+e,e为时间戳单位s,url为请求地址  
  8.   
  9.          #这里我们的st是我们按照secure_link_md5的方式计算的哈希,secure_link会比对它计算的哈希值是否与我们的st参数一致   
  10.          if ($secure_link = "") {  
  11.             #资源不存在或哈希比对失败  
  12.             return 402;  
  13.          }  
  14.          if ($secure_link = "0") {  
  15.             #时间戳过期  
  16.             return 404;  
  17.          }  
  18.      if ($request_filename ~* ^.*?\.(mp4)$){  
  19.              #直接下载防止打开文件  格式: (mp4|txt|jpg)  
  20.         add_header Content-Disposition 'attachment;';  
  21.       }  
  22.       }  
  23.   
  24.       #设置402,404的跳转  
  25.       #在http节点  
  26.     error_page 400 = 404.html; #跳转400页面  
  27.     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包,大家自行下载
[html]  view plain  copy
  1. /**  
  2.  * 防盗链资源下载地址  
  3.  *   
  4.  * @author Allen 2017年6月5日  
  5.  *  
  6.  */  
  7. public class SourceDownloadPath {  
  8.     static Logger logger = Logger.getLogger(SourceDownloadPath.class);  
  9.     /** class Constant **/  
  10.     final static String HTTP = "http://";  
  11.     final static String ST = "?st=";  
  12.     final static String E = "&e=";  
  13.     final static String F = "/";  
  14.     final static String WARN = "path参数最好带上 \"/\" ,例: \"/abc.mp4\" ";  
  15.   
  16.     public static String execute(String path) {  
  17.         if (path.indexOf(F) == -1) {  
  18.             path = StringUtils.append(F,path);  
  19.             logger.warn(WARN);  
  20.         }  
  21.         String time = String.valueOf(System.currentTimeMillis() / 1000 + Long.valueOf(Conf.VIDEO_DOWNLOAD_INVALID));   
  22.                 // +n代表n秒后地址失效  
  23.         String md5 = Base64  
  24.                 .encodeBase64URLSafeString(DigestUtils.md5(StringUtils.append(Conf.VIDEO_DOWNLOAD_SECRET, path, time)));  
  25.         return StringUtils.append(HTTP, Conf.SERVER_IP, path, ST, md5, E, time);  
  26.     }  
  27.   
  28.     public static void main(String[] args) {  
  29.         System.out.println(execute("abc.mp4"));  
  30.   
  31.     }  
  32. }  
  33. #执行结果   
  34. [WARN ] 2017-06-07 16:12:14(0)  
  35. --> [main] com.api.util.SourceDownloadPath.execute(SourceDownloadPath.java:27): path参数最好带上 "/" ,例: "/abc.mp4"    
  36. http://127.0.0.1/abc.mp4?st=s-UPx9up2DH_MpVse4vT-w&e=1496823314  
[html]  view plain  copy
  1. public class StringUtils {   
  2.     public static String append(String... params) {  
  3.         return Arrays.asList(params).stream().collect(Collectors.joining());  
  4.     }  
  5. }  

结束

就到这里了,我们对nginx组件非覆盖安装以及secure_link组件的配置,java生成防盗链的method都进行了展示。希望可以帮到大家

猜你喜欢

转载自blog.csdn.net/qq_33545491/article/details/78029466
今日推荐