Nginx防盗链
防盗链与http的referer
防盗链本质上就是我们自己服务器上的资源,只能由我们自己服务器来访问,其他网站引用的这些资源不能访问。
当我们的请求用户打到我们这台机器上,我们这台机器会给他寻找他所访问的一些资源,假设请求是个静态的 HTML 页面 index.html。这个页面里引用了一些其他的资源,这些资源都是在 HTML 的骨架里再次被访问的,比如说 CSS、js,它还会二次请求,甚至多次去请求我们当前这个站点,当再次请求的时候,
会在请求的request header 里加上一个参数叫 refer,这是 HTTP 协议所规定的,由浏览器来遵守的。
refer,在我们第二次访问的时候才有,在第一次访问的时候是没有的。
防盗链配置
valid_referers none | blocked | server_names | strings ....;
- none, 检测 Referer 头域不存在的情况。
- blocked,检测 Referer 头域的值被防火墙或者代理服务器删除或伪装的情况。这种情况该头域的值不以“http://” 或 “https://” 开头。
- server_names ,设置一个或多个 URL ,检测 Referer 头域的值是否是这些 URL 中的某一个。
在需要防盗链的location中配置
server {
listen 80;
server_name localhost;
location / {
rewrite ^/([0-9]+).html$ /index.jsp?pageNum=$1 break;
proxy_pass http://127.0.0.1:8080;
}
location ~*/(js|img|css) {
valid_referers 192.168.44.101;
if ($invalid_referer) {
rewrite ^/ /img/x.png break;
# return 401;
}
root /usr/local/nginx/static;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
使用curl测试
curl -I http://192.168.44.101/img/logo.png
带引用
curl -e "http://baidu.com" -I http://192.168.44.101/img/logo.png
License:
CC BY 4.0