http的referer和盗链

http协议中的referer,用来表示来源,当请求html页面时没有referer,但是因为html中引入了css、js、img等静态资源,这些静态资源都需要一个来源,所以referer就表示了这个来源。

nginx 获取当前主域名 nginx获取referer_学习


nginx 获取当前主域名 nginx获取referer_学习_02

盗链就是当referer是其他站点通过代理、html中的引用都一些方法访问到我们这个站点的静态资源来生成的,域名不是我们自己的域名。我们可以利用referer来防止盗链,通过判断取到的referer是不是我们自己想要的域名,如果是就继续访问,否则进行拦截。

防盗链基本配置与none

目前四个虚拟机,CentOS7-1是Nginx服务器,CentOS7-2是Tomcat服务器,CentOS7-1代理了CentOS7-2

nginx 获取当前主域名 nginx获取referer_学习_03

配置CentOS7-3代理CentOS7-1,也就是再配置另一台Nginx服务器代理现在的Nginx服务器,使用proxy_pass

nginx 获取当前主域名 nginx获取referer_http_04


访问CentOS7-3,也就是另一台Nginx服务器,它代理了CentOS7-1(Nginx),CentOS7-1(Nginx)也代理了CentOS7-2(Tomcat),所以可以正常访问

nginx 获取当前主域名 nginx获取referer_nginx_05


这时我们不想让css、js、img等静态资源暴露给除了nginx7-1服务器以外的其他服务器,修改nginx7-1的配置文件

防盗链配置:valid_referers none | blocked | server_name | strings ...;
- none:检测referer不存在的情况
- blocked:检测referer的值被防火墙或者代理服务器删除或伪装的情况。这种情况该referer的值不以“http://”或"https://"开头
- server_name,设置一个或多个合法的url,用来检测referer的值是否是其中的某个`

nginx 获取当前主域名 nginx获取referer_http_06


重启nginx,访问合法的referer(CentOS7-1),可以发现静态资源都可以加载出来

nginx 获取当前主域名 nginx获取referer_http_07


访问不合法的referer,可以发现静态资源无法访问,都会报403,防盗链成功

nginx 获取当前主域名 nginx获取referer_nginx_08


直接访问某张静态图片,就算没有referer,也是报403

nginx 获取当前主域名 nginx获取referer_学习_09


如果想要在没有referer的情况下可以访问静态资源,使用none,修改配置文件

nginx 获取当前主域名 nginx获取referer_nginx 获取当前主域名_10


直接打开静态图片,发现没有referer也可以访问

nginx 获取当前主域名 nginx获取referer_nginx 获取当前主域名_11

使用curl测试防盗链

yum install -y curl

nginx 获取当前主域名 nginx获取referer_nginx_12


使用curl测试:

curl -I http://192.168.195.128/topimg/logo.png

nginx 获取当前主域名 nginx获取referer_学习_13

带referer(使用某个地址访问资源):

curl -e "http://baidu.com" -I http://192.168.195.128/topimg/logo.png

nginx 获取当前主域名 nginx获取referer_nginx 获取当前主域名_14

盗链资源返回错误页面或错误图片

返回错误页面

新建一个错误页面html

nginx 获取当前主域名 nginx获取referer_http_15


nginx 获取当前主域名 nginx获取referer_http_16


修改配置文件,增加error_page

nginx 获取当前主域名 nginx获取referer_nginx_17


配置如果是不合法的referer,就返回错误页面

nginx 获取当前主域名 nginx获取referer_静态资源_18


使用不合法的referer访问静态资源,报401,返回错误页面

nginx 获取当前主域名 nginx获取referer_学习_19


返回错误图片

准备一张错误图片,放到某一目录下

nginx 获取当前主域名 nginx获取referer_静态资源_20


nginx 获取当前主域名 nginx获取referer_nginx_21


修改配置文件,如果发现不合法的referer,就把所有不合法请求rewrite为错误图片的目录地址

nginx 获取当前主域名 nginx获取referer_nginx 获取当前主域名_22


访问不合法的referer,所有图片的地址都会被rewrite为错误图片的地址

nginx 获取当前主域名 nginx获取referer_静态资源_23