一  referer模块

小结: referer模块可以'进行防盗链',但这种防盗链方式比较'脆弱',可以通过'伪造值'来绕过防盗链

nginx path 获取 nginx获取referer_请求头

Referer请求头    Referrer-Policy响应头

默认:浏览器会在'特定场景'的跳转自动添加Referer请求头

备注:其它如'curl、postman'方式不会主动添加,但是可以'伪造'Referer请求头

nginx path 获取 nginx获取referer_请求头_02

二  secure_link模块

①   概述

类比: 这个的原理是生成一个'下载的 token',用户访问的时候 nginx 来'验证这个 token'

场景: 检查'请求链接的权限(access)'以及'是否过期',多用于'下载服务器'防盗链

nginx path 获取 nginx获取referer_nginx path 获取_03

nginx path 获取 nginx获取referer_运维_04

nginx path 获取 nginx获取referer_nginx path 获取_05

②   secure_link

语法: secure_link md5_hash[,expiration_time]

细节: 'expiration_time'是可选的

nginx path 获取 nginx获取referer_nginx path 获取_06

1)使用secure_link定义一段'包含了变量的字符串',从中获取'校验和的值'和'url链接的生命周期'

细节点:'变量'常见来自'查询参数(arg_name)'或'请求头(http_head)'

2)字符串中的'校验和的值'会和'secure_link_md5'中的指定参数的'md5 哈希值'进行对比

3)如果两个值不一致,$secure_link变量值会被'设置为空串'

4)如果一致,才会检查'链接的生命周期'

  [1]、如果链接'设置有'时效性,检查发现'过期',$secure_link变量值为'0'

  [2]、'没有'过期,$secure_link变量值则为'1'

  [3]、如果'没有设置过期时间',则链接'永久'有效

重点: 先检查'md5 hash'是否匹配、再检查'life_time'是否过期

nginx path 获取 nginx获取referer_字符串_07

③   secure_link_md5

nginx path 获取 nginx获取referer_请求头_08

④  方式一

1)'secure_link' + 'secure_link_md5' 指令配合

2)用$secure_link'检验'结果

$secure_link的返回值规则:验证不通过是'空'、过期是'0'、通过是'1'

官方案例

nginx path 获取 nginx获取referer_运维_09

tr命令 openssl md5 openssl base64

(2)解读

nginx path 获取 nginx获取referer_运维_10

实操

1)nginx配置

重点: nginx只需要知道'如何拼接(变量+字符串)'即可,因为'hash不可逆'

nginx path 获取 nginx获取referer_字符串_11

2)生成hash摘要

关注点1: 要与'secure_link_md5'的格式一样

关注点2: 这个用'openssl'来模拟产生hash,生产级环境要'严谨的设计程序'生成

python获取自epoch的秒数 

nginx path 获取 nginx获取referer_运维_12

nginx path 获取 nginx获取referer_字符串_13

++++++++++ '思考:生产环境谁产生hash摘要别嗯发送给客户端?' ++++++++++

nginx path 获取 nginx获取referer_运维_14

3)客户端发送请求测试

nginx path 获取 nginx获取referer_nginx_15

⑤  secure_link_secret

nginx path 获取 nginx获取referer_字符串_16

===============  /prefix/hash/link的'解读'  ===============

1)prefix'前缀'是非斜杠的任意的字符串

2)hash'哈希值'是link与密钥secret的MD5值

3)link'请求的路径'

nginx path 获取 nginx获取referer_字符串_17

⑥  方式二

$secure_link的返回值规则:验证不通过是'空';通过则值为'资源路径'

(1)官方案例

nginx path 获取 nginx获取referer_nginx path 获取_18

实操

1)原理

nginx path 获取 nginx获取referer_nginx_19

2)生成md5

nginx path 获取 nginx获取referer_nginx path 获取_20

3)nginx部分配置

细节点: nginx事先'已经知道' word

补充: ^可以匹配上'任何url'

nginx path 获取 nginx获取referer_nginx path 获取_21

4)客户端发送请求

机制: 

  1) nginx从url中取出'test.txt'并与nginx中的配置的'word'生成一个新的'md5_hash'

  2) 然后与请求中传递的'md5_hash'做比较

nginx path 获取 nginx获取referer_运维_22

⑦   内置变量 

nginx path 获取 nginx获取referer_请求头_23

nginx path 获取 nginx获取referer_字符串_24

⑧   思考1

nginx path 获取 nginx获取referer_请求头_25

⑨  思考2

nginx path 获取 nginx获取referer_字符串_26

⑩  思考3

nginx path 获取 nginx获取referer_请求头_27

⑪  思考4

nginx path 获取 nginx获取referer_字符串_28

nginx path 获取 nginx获取referer_nginx path 获取_29

后续: 收集'计算机相关'词汇  -->'目的':看英文文档