Nginx-9 防盗链
2020-01-10 本文已影响0人
Habit_1027
什么叫盗链
两个网站 A 和 B, B网站引用了A网站上的图片,这种行为就叫做盗链。 防盗链,就是要防止B引用A的图片。
一、nginx 防止网站资源被盗用模块
ngx_http_referer_module
如何区分哪些是不正常的用户?
HTTP Referer是Header的一部分,当浏览器向Web服务器发送请求的时候,一般会带上Referer,
告诉服务器我是从哪个页面链接过来的,服务器借此可以获得一些信息用于处理,例如防止未经允许
的网站盗链图片、文件等。因此HTTP Referer头信息是可以通过程序来伪装生成的,所以通过Referer
信息防盗链并非100%可靠,但是,它能够限制大部分的盗链情况.
二. 防盗链配置
配置要点:
vim /etc/nginx/nginx.conf
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# valid_referers 使用方式
Syntax: valid_referers none | blocked | server_names | string ...;
Default: —
Context: server, location
- none : 允许没有http_refer的请求访问资源;
- blocked : 允许不是http://开头的,不带协议的请求访问资源---被防火墙过滤掉的;
- server_names : 只允许指定ip/域名来的请求访问资源(白名单);
环境(准备两台机器,一张图片)
web服务器(yum安装的 有图片) ---------------10.3.134.111
盗链机器(编译安装的)----------------------------------10.3.134.99
操作web服务器
web服务器上有图片
[root@yum-n ~]# ls /opt/
king.jpg qf.css qf.png
查看web服务器的配置文件
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location ~ \.(jpg|css|png)$ {
root /opt/ ;
}
location / {
include uwsgi_params;
uwsgi_pass 10.3.134.99:9090;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
操作盗链机器
配置盗链机器
[root@mpn-salve ~]# vim /ding/html/index.html
<html>
<head>
<meta charset="utf-8">
<title>www.testdl.com</title>
</head>
<body style="background-color:orange;">
<img src="http://10.3.134.111/king.jpg"/>
</body>
</html>
image.png
在浏览器中测试(访问盗链机器ip)
image.png继续在web服务器上操作,防盗链配置
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location ~ \.(jpg|css|png)$ {
root /opt/ ;
valid_referers none blocked *.www.testdl.com 10.3.134.111;
if ($invalid_referer) {
return 403;
}
}
location / {
include uwsgi_params;
uwsgi_pass 10.3.134.99:9090;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
image.png
再次在浏览器中测试(访问盗链机器ip)
image.png已经无法访问该图片了