ngx_http_secure_link_module模块用于检查请求链接的真伪,保护资源免受未经授权的访问,限制链接的生命周期。

通过将请求中传递的校验和值与请求计算的值进行比较来验证请求链接的真实性。如果链接的生命周期有限并且时间已过,则该链接将被视为过时。

验证原理:

  • 用户在客户端点击下载按钮,服务器收到请求后生成一个下载地址返回给客户端。
  • 客户端使用这个生成的下载地址去请求资源,此时nginx去做校验,校验链接地址真伪和链接地址是否过期。如果链接地址是真的并且链接地址没有过期,就给客户端返回下载资源。

nginx验证和服务器生成密钥规则要一致,否则验证是不会通过的

该模块提供两种备选操作模式:

  • 第一种模式secure_link_secret指令启用,用于检查请求链接的真实性以及保护资源免受未经授权的访问
  • 第二种模式secure_linksecure_link_md5指令启用,也用于限制链接生命周期。

更详细参考官网

http://nginx.org/en/docs/http/ngx_http_secure_link_module.html

0x01:配置模块语法

ngx_http_secure_link_module主要有以下三个语法

secure_link

Syntax: secure_link expression;
Default: —
Context: http, server, location

secure_link_md5

Syntax: secure_link_md5 expression;Default: —
Context: http, server, location

secure_link_secret

Syntax: secure_link_secret word;
Default: —
Context: location

0x02:安装ngx_http_secure_link_module模块

  • 首先检查nginx是否已安装模块
#nginx -V

结果如下,没有安装ngx_http_secure_link_module模块

输出nginx所有已安装模块,检查是否有ngx_http_secure_link_module,因为这个模块没有默认编译,在编译Nginx时,必须使用明确的配置参数

--with-http_secure_link_module

  • 安装

执行以下命令

#先安装secure link 其实这个组件nginx本身就有,只不过是默认不安装罢了
./configure  --prefix=/usr/local/nginx --user=nginx
--group=nginx --with-http_secure_link_module
--with-http_stub_status_module

执行mak编译nginx

make

make之后的操作需要注意,如果nginx第一次安装,直接执行make install即可

make install

如果单纯添加模块,不需要install,而是执行以下操作,将打过补丁的nginx二进制文件覆盖/usr/local/nginx/sbin/目录中的文件即可

#备份之前的nginx
mv /usr/local/nginx/sbin/nginx  /usr/local/nginx/sbin/nginx.bak
#拷贝新的nginx到sbin目录
cp /nginx源码目录/objs/nginx   /usr/local/nginx/sbin/

0x03: ngx_http_secure_link_module配置

在server节点增加以下location配置

location / {root html; #这里配置了2个参数一个是md5,一个是expiressecure_link $arg_md5,$arg_expires;#md5的哈希格式为: expires+url+addr#expires为时间戳单位s#url为请求地址#remote_addr为远程IP地址#mysecure为密钥secure_link_md5 "mysecure$secure_link_expires$uri$remote_addr";if ($secure_link = "") {#资源不存在或哈希比对失败return 402;}if ($secure_link = "0") {#时间戳过期return 404;}if ($request_filename ~* ^.*?.(mp4)$){#直接下载防止打开文件  格式: (mp4|txt|jpg)add_header Content-Disposition 'attachment;';}
}#设置400,404的跳转
#在server节点
error_page 400 = 400.html; #跳转400页面
error_page 404 = 404.html; #跳转404页面

在html目录添加400.html和404.htmll两个界面

0x04:JAVA计算防盗链地址

需要使用到commons-codec-1.10.jar包,请自行下载

package com.alibaba.csp.sentinel.datasource.consul;import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;/*** 防盗链资源下载地址**/
public class GenSourceDownloadPath {final static String HTTP = "http://";final static String ST = "?md5=";final static String E = "&expires=";final static String F = "/";final static String WARN = "path参数最好带上 "/" ,例: "/abc.mp4" ";final static String SERVER_IP = "127.0.0.1";final static Long expires = 20L; //过期时间 秒final static String secret = "mysecure"; //密钥public static String execute(String path) {if (path.indexOf(F) == -1) {path =  F + path;System.out.println(WARN);}// +n代表n秒后地址失效String time = String.valueOf(System.currentTimeMillis() / 1000 + expires); // $secure_link_expires$uri$remote_addrString md5Str = secret + time + path + SERVER_IP;byte[] md5byte = DigestUtils.md5(md5Str);String base64 = Base64.encodeBase64URLSafeString(md5byte);return HTTP + SERVER_IP + path+ ST + base64 + E + time;}public static void main(String[] args) {System.out.println(execute("my.conf"));}
}

现在html目录存放一个图片文件my.conf,该文件是需要访问演示的文件

执行GenSourceDownloadPath生成一个访问的URL:

http://127.0.0.1/my.conf?md5=YO4diAmlVa8NfHlMBCMFaw&expires=1598071052

执行访问

如果没有带参数访问

超过20s访问,不在有权限访问

备注:

如果按官方秘密mysecure放在最后,需加一个空格与参数分隔

在使用java计算时也需要多加一个空格

nginx 访问图片404_Nginx系列:安全下载模块相关推荐

  1. nginx 访问图片404_nginx发布vue 项目

    在本次使用nginx发布vue项目遇到 配置location 始终404 和 在项目子目录点击浏览器刷新出现404问题 使用nginx发布vue项目,为了方便测试就下载了一个nginx 放置自己目录下 ...

  2. nginx 访问图片404_Nginx学习笔记(二、Nginx配置文件详解) - 被猪附身的人

    nginx的启停控制 1.Nginx信号控制: nginx中可以通过发送信号的方式来控制服务器的启停等,但要达成这些操作首先要知道nginx的PID. 获取pid的方式有两种: 利用linux的ps命 ...

  3. 使用Nginx访问图片报404

    前言:之前由于一个需求问题,需要将图片上传到服务器上面,然后进行访问,但是我后端用的是SpringSecurity安全框架, 请求路径直接拦截了,放行也放不了,放行的的java内部程序的请求路径,然后 ...

  4. 如何用Nginx访问图片服务器的图片

    1.找到nginx.conf 打开nginx.conf修改配置 像我的就在如下路径中(具体因人而异) Nginx默认使用端口是80,这里直接先把Nginx端口改为8088,修改server的端口,并配 ...

  5. nginx 访问图片上传服务器出现403错误解决方案

    近期在nginx+ftp搭建图片上传服务器的时候,在浏览器访问图片路径出现403错误,经搜集各位大神的回答,整理以下内容: 大家可以按下面的介绍,一一排除自己的问题,欢迎大家指正! 1.首先查看ngi ...

  6. nginx访问静态文件不下载

    1.什么是MIME-TYPE? MIME--Multipurpose Internet Mail Extension(多用途因特网邮件扩展)最初是为了满足电子邮件支持多字符集及附件而出现的.MIME ...

  7. nginx 图片站点加访问权_nginx配置访问图片路径以及html静态页面的调取方

    给大家讲一个快速配置nginx访问图片地址,以及访问html静态页面的配置. 1.实验环境 首先随便某个路径下创建相应的目录.如图下 2.在里面放自定义的html或者图片. 3.nginx配置 use ...

  8. nginx加载html目录下图片,nginx配置访问图片路径以及html静态页面的调取方法

    nginx配置访问图片路径以及html静态页面的调取方法 发布时间:2017-03-09 12:06 来源:互联网 当前栏目:web技术类 给大家讲一个快速配置nginx访问图片地址,以及访问html ...

  9. win7 ftp安装搭建,并且上传图片到ftp文件夹下,使用nginx访问下载图片

    ftp服务器搭建,这是在服务器上搭建的,下面的上传代码功能是在另一台电脑上操作的,相当于是一台电脑往另一台电脑上传图片. 双击它进去 右键网站,添加ftp站点,下面的aaa是我新建好的. 我这个路径选 ...

最新文章

  1. transforms.normalize()函数
  2. 睿熙科技完成Pre-A融资,用于VCSEL芯片量产
  3. python映射类型-python笔记-映射类型(字典)
  4. 电脑勒索病毒之谜:用户如何能确保电脑安全
  5. 密码学之hill密码
  6. php 从第几开始截取,php如何实现截取前几个字符
  7. MFC添加自定义消息及重写消息过程
  8. 【喜报】JEEWX荣获“2016 年度码云新增热门开源软件排行榜”第一名!
  9. oracle硬盘亮黄灯,RH2288H V3服务器硬盘亮黄灯故障处理案例
  10. matplotlib color 参数
  11. JAVA-java内存分配
  12. JavaScript语言精粹:对象——读书笔记
  13. 利用MATLAB仿真最小发射功率下WSN的连通性和覆盖率
  14. 一个程序,让你清楚区分二进制文件和文本文件
  15. JAVA基于J2ME的手机游戏开发免费
  16. 解决趋势OfficeScan11自动显示隐藏文件等问题
  17. Python爬取安居客租房数据,设置排除自己条件以外的数据
  18. 阿里云DKMS对接记录
  19. 微信公众号如何排版好看?教你三招技巧
  20. css 压缩后出现了问题,觉得js或css压缩后不好调试?你应该认识一下source map了...

热门文章

  1. 【Pyhton爬虫】中国大学排名爬虫
  2. 卷积神经网络学习指南_卷积神经网络的直观指南
  3. 终端zsh_只需七个步骤,即可使您的“ ZSH”终端站起来—直观指南
  4. -bash-退出_为什么这么多开发人员在找到工作之前就退出了。 请-不要。
  5. linux mysql -d_在linux中无法启动mysqld 服务
  6. 2048游戏代码python_200 行代码实现简易版 2048 游戏 (python)
  7. 利用Python我发现我女朋友每天都在看这种网站
  8. jquery中AddClass()方法问题
  9. 是否应为孩子聘请家教 以及 什么样的家教适合孩子
  10. Winform窗体中发送HTTP请求 手工发送HTTP请求主要是调用 System.Net的HttpWebResponse方法