什么是盗链
是在自己的界面展示不在自己服务器上的内容,通过技术手段获得他人服务器的资源地址,在自己页面向用户提供此内容,从而减轻自己服务器的负担,因为真实的空间和流量来自别人的服务器。
防盗链设计思路
区别哪些请求时非正常用户请求
具体配置
贴上配置文件吧
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
#include /etc/nginx/mime.types;
#default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location ~* \.(jpg|gif|png)$ {
root /home/picture;
valid_referers none blocked 129.211.75.230;
if ($invalid_referer) {
return 403;
}
}
}
具体说一下配置的含义。
valid_referers none blocked 这里可以简单的理解为设置白名单,也就是说谁可以对我们服务器的静态资源进行引用。这里是可以填写多个地址或域名的,最少也要填上本机的地址。
具体分析的话,valid_referers会根据Referer Header头的内容分配一个值为0或1给变量$invalid_referer
none 代表没有referer
blocked 代表有referer但是被防火墙或者是代理给去除了
之后的if判断,即内置变量 $invalid_referer,如果引用我们的不是指令中定义的ip或域名,则该内置变量置为1,响应403。
效果展示
可以看到,这里是我们做过防盗链配置后在本机服务器中引用其他服务器中图片的效果图,可以看到图片并没有成功加载,而返回的状态码为403,也就是我们刚才设置return的状态码。
至此,防盗链配置成功!