一篇很好的nginx防盗链文章,复制过来学习,连接地址:http://4593973.blog.51cto.com/4583973/1537963html
咱们常常会看到在浏览某一图片时会弹出一“403权限禁止”错误,这说明有可能正在浏览的这个网站用到的图片在盗用别的网站图片,而被盗用的网站采用了防盗链技术。那么怎样才能不让本身的网站受害呢?前端
这里讲述的是nginx防盗链技术,是nginx。nginx的具体安装以及相关的优化在这里很少说了。我用一台nginx服务器模拟后端服务器,这台nginx主要用做图片、gif、swf等静态服务器(会在这台服务器上对这些静态文件作防盗链技术),ip地址为192.168.0.116;又用了一台apache服务器做为前端服务器(用apache作前端不是好的选择,通常都会用nginx作前端,但我这里只是为了模拟,这里的前端服务器仅仅提供一个简单的主页界面而已),ip地址为192.168.0.115。
nginx
在nginx服务器上面的操做:apache
[root@nginx conf]# cat nginx.conf ///nginx的主配置文件后端
user nobody;浏览器
worker_processes 1;服务器
pid logs/nginx.pid;app
events {ide
worker_connections 65535;学习
use epoll;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
include extra/daolian.conf; ///我把防盗链技术配置文件独立出来了,这只是一个习惯而已,能够不把配置文件独立出来而是把它们所有放到nginx.conf的http节点里面。
}
root@nginx extra]# cat daolian.conf ///防盗链的具体配置文件放在了/usr/local/nginx/conf/extra目录下面。
server {
listen 80;
server_name 192.168.0.116; ///被访问的域名
location ~*.(gif|jpg|png|swf|flv)$ { ///定义对gif/jpg/png/swf/flv等静态页面进行防盗
root /usr/local/nginx/html; ///指定上述静态页面放在的位置
valid_referers none blocked 192.168.0.115; ///指定哪一个域名能够访问本静态服务器,也能够是ip地址,这里我指定的是192.168.0.115,也就是内部的前端apache服务器,只容许这台访问。
if ($invalid_referer) {
return 403; ///若是有其余机器访问这台nginx服务器就会给那台机器返回一个403访问禁止的页面,也就是说若是出现了盗用现象就提示403错误。
}
}
}
而后在/usr/local/nginx/html目录下放一张0.jpg的照片做为测试用(由于这台nginx服务器就是用来作后端静态服务器用的,放这张照片仅模拟gif、jpg、swf等诸多静态页面。
[root@nginx extra]# /usr/local/nginx/sbin/nginx -s reload ///重启nginx服务器,使配置文件生效。
到这里nginx服务器的配置完成,下面对apache服务器进行配置:
[root@apache htdocs]# cat index.html ///我在apache服务器的/usr/local/apache2/htdocs目录下建立这个主页,做为远端客户访问本网站的入口用,即远在天涯海角的客户端要想访问本网站的内容只须要访问192.168.0.115就能够进去网站而后访问全部的内容了。
<html>
<head>
<title>fang dao lian test</title>
</head>
<body>
<font size="10">
<a href="http://192.168.0.116/0.jpg">dao lian picture</a> ///作一个连接,连接后端nginx静态服务器
<br></br>
</font>
</body>
</html>
[root@apache htdocs]# /usr/local/apache2/bin/apachectl -k restart ///重启apache,使配置生效。
如今能够在客户端浏览192.168.0.115测试了,见下图效果:
在客户端浏览器上输入网站前端apache的ip时出现了apache的主页,点击一下:
点击以后,浏览器正确的到后端nginx服务器找到了须要的照片,浏览器中的域名也随之变成了192.168.0.116,这表示内部的跳转成功了。分别分析两台服务器的访问日志也能发现有人访问了。
下面作一次,假设本网站的前端服务器域名是www.xiaowei.com,不是192.168.0.115了,即192.168.0.115是其余公司的网站服务器,当有人访问其余公司的那个192.168.0.115服务器时,而这台服务器还想着要来到192.168.0.116这台nginx服务器上面调用0.jpg这张照片,同时192.168.0.116这台服务器作了盗链技术,192.168.0.116只容许www.xiaowei.com这个本身的域名访问,其余公司的ip若要访问时就视为盗用而后返回一个错误值,具体作法以下:
[root@nginx extra]# cat daolian.conf ///只须要修改这个配置文件就行啦
server {
listen 80;
server_name 192.168.0.116;
location ~*.(gif|jpg|png|swf|flv)$ {
root /usr/local/nginx/html;
valid_referers none blocked www.xiaowei.com; ///只须要将这里的域名修改为www.xiaowei.com就能够啦,其余配置其余文件都不须要修改
if ($invalid_referer) {
return 403;
}
}
}
[root@nginx extra]# /usr/local/nginx/sbin/nginx -s reload
再次在客户端上访问192.168.0.115,再次点击连接时,发现弹出了403访问禁止权限,见下图,由于这里的”陌生“的服务器192.168.0.115盗用了192.168.0.116,而192.168.0.116作了防盗链技术:
到这里,若是出现了盗用现象,我就给它弄了403访问禁止的页面,可不能够把它直接跳到本身网站的主页呢?固然能够了,假设个人网站的默认主页是www.hfuu.edu.cn,若是出现了盗用现象,那么客户端那面随之就会看到www.hfuu.edu.cn这个主页,作法以下:
[root@nginx extra]# cat daolian.conf
server {
listen 80;
server_name 192.168.0.116;
location ~*.(gif|jpg|png|swf|flv)$ {
root /usr/local/nginx/html;
valid_referers none blocked www.xiaowei.com; ///这一行仍旧设置成只容许本身的域名访问
if ($invalid_referer) {
# return 403;
rewrite ^.*$ http://www.hfuu.edu.cn; ///若是出现了盗用,就直接把用户的访问转到了本身的主页,这样作不只避免了盗用,也增长了本身的pv。
}
}
}
[root@nginx extra]# /usr/local/nginx/sbin/nginx -s reload
客户端再次访问,点击连接时,发现浏览器自动跳转到了”本身的网站主页“www.hfuu.edu.cn,见下图:
这代表若是出现了盗链,用户访问会成功跳转到其余页面。
到这里,nginx的防盗链技术描述完成。