配置防盗链、以及跨域访问
先来说说什么是盗链吧
简单的理解就是 比如我的网站有很多精美的图, 但是很多个人站长通过爬虫或者手动的 把我的图片连接放到他们自己的文章中引用,
这样做的好处,他们的网站访问的图片 对他们网站没有压力,但是会对我的网站造成压力, 但是对我的网站一点也没有好处。
为了避免这些我们需要
防止资源盗链
防盗链,指的是防止资源被其他网站恶意盗用。
基础防盗链设置思路:主要是针对客户端请求过程中所携带的一些Header信息来验证请求的合法性,比如客户端在请求的过程中都会携带referer信息。优点是规则简单,配置和使用都很方便,缺点是防盗链所依赖的Referer验证信息是可以伪造的,所以通过referer信息防盗链并非100%可靠,但是他能够限制大部分的盗链情况。
在盗链服务器上准备html文件,偷取我的图片 |
<html>
<head>
<meta charset="utf-8">
<title>baimei.com</title>
</head>
<body style="background-color:pink;">
<center><img src="https://web.baimei.com/daolian.jpg"/></center>
</body>
</html>
访问页面查看 可以看到一张图片。
服务器上配置防盗链
location ~ .*\.(jpg|png|gif) {
root /var/www/wordpress/wp-content/extra/;
valid_referers none blocked *.baimei.com, *.baidu.com;
if ( $invalid_referer ) {
return 403;
}
}
以上配置含义表示,所有来自*.baimei.com都可以访问到当前站点的图片,如果来源域名不在这个列表中,那么$invalid_referer等于1,在if语句中返回一个403个客户,这样用户便会看到一个403的页面
如果不使用return而是用rewrite,那么盗链图片会返回一个pei.jpg给用户 |
#防盗链demo
location ~ .*\.(jpg|png|gif) {
root /var/www/wordpress/wp-content/extra/;
valid_referers none blocked *.baimei.com;
if ( $invalid_referer ) {
rewrite ^(.*)$ /Picture/daolian1.gif break;
}
}
如果希望某些网站可以盗链 |
location ~ .*\.(jpg|png|gif) {
root /data;
valid_referers none blocked *.baimei.com server_name ~\.google\. ~\.baidu\.;
if ( $invalid_referer ) {
return 403;
}
}
当然这种防护并不能百分百保证资源不被盗链,因为我们可以通过命令来修改来源的refer信息 |
#伪造协议头访问
[root@web01 code]# curl -e "https://www.baidu.com" -I http://test.baimei.com/Picture/daolian.jpg
HTTP/1.1 403 Forbidden
Server: nginx
Date: Thu, 10 Oct 2019 09:01:05 GMT
Content-Type: text/html; charset=utf-8,gbk
Content-Length: 162
Connection: keep-alive
#伪造协议头访问
[root@web01 code]# curl -e "https://www.baimei.com" -I http://test.baimei.com/Picture/daolian.jpg
HTTP/1.1 200 OK
Server: nginx
Date: Thu, 10 Oct 2019 09:01:35 GMT
Content-Type: image/jpeg
Content-Length: 556417
Last-Modified: Thu, 10 Oct 2019 07:14:19 GMT
Connection: keep-alive
ETag: "5d9eda4b-87d81"
Accept-Ranges: bytes
模拟盗链实例
配置被盗链机器 |
10.0.0.8 static.baimei.com
#1.配置Nginx
[root@web02 conf.d]# cat static.conf
server {
listen 80;
server_name static.baimei.com;
root /code;
location / {
index index.html;
}
}
#2.上传2张图片
一张是可以被盗链的图片
一张是广告位的图片
#3.重启服务器
[root@web02 code]# systemctl restart nginx
另一台机器盗链 |
10.0.0.7 dl.baimei.com ###盗链服务器
#1.配置Nginx
[root@web01 conf.d]# cat try.conf
server {
server_name dl.baimei.com;
listen 80;
root /code;
location / {
index index.html;
}
}
#2.配置盗链的页面
[root@web01 code]# cat /code/tt.html
<html>
<head>
<meta charset="utf-8">
<title>baimeidashu.com</title>
</head>
<body style="background-color:pink;">
<img src="http://static.baimei.com/daolian.jpg"/> #根据情况修改你的服务器地址
</body>
</html>
添加防盗链 |
location ~* \.(gif|jpg|png|bmp)$ {
valid_referers none blocked *.baimei.com;
if ($invalid_referer) {
return 403; #可以选择直接返回403
rewrite ^(.*)$ /daolian.png break; #也可以选择返回一张水印的图片,给公司做广告
}
欢迎来撩 : 汇总all