防盗链目的:防止资源被盗用
防盗链设置首要方式:区别哪些请求是非正常的用户请求
基于http_refer防盗链配置模块语法:
Syntax:valid_referers none | blocked | server_names | string ...;
Default:-
Context:server,location
none:表示允许没有带referer信息的访问
blocked:表示referer信息不是标准的http://域名这种方式过来的允许访问
server_names:允许配置的server_name过来的访问,可以是IP,域名,支持表达式配置
Nginx的日志中配置了变量$http_referer,它的值是上一次访问的地址,所有第一次访问为空的,测试如下:
新建/opt/app/code/test_refer.html,准备wei.png图片/opt/app/code/images/wei.png
<html> <head> <meta charset="utf-8"> <title>imooc1</title> </head> <body style="background-color:red;"> <img src="http://192.168.7.151/wei.png"/> </body> </html>
配置文件添加首页访问路径,和图片访问路径
location ~ .*.(jpg|gif|png)$ { root /opt/app/code/images; } location ~ .*.(html|htm)$ { root /opt/app/code; }
重新启动nginx,并访问:http://192.168.7.151/test_refer.html,访问了两次服务端
查看日志,发现第一次的$http_referer是空,第二次值是第一次访问的地址,如下:
修改配置文件,将server_name修改为服务器地址192.168.7.151,并valid_referers配置
location ~ .*.(jpg|gif|png)$ { valid_referers none blocked 192.168.7.151; if ($invalid_referer) { return 403; } root /opt/app/code/images; }
重新启动nginx服务,分别执行下面3条命令,查看是否允许访问
curl -I http://192.168.7.151/wei.png
curl -e "http://www.baidu.com" -I http://192.168.7.151/wei.png
curl -e "http://192.168.7.151" -I http://192.168.7.151/wei.png