Nginx防盗链配置具体方法详解

一:一般的防盗链如下:

 代码如下 复制代码
location ~* .(gif|jpg|png|swf|flv)$ {
valid_referers none blocked www.111cn.net ;
if ($invalid_referer) {
rewrite ^/ http://www.111cn.net;
#return 404;
}
}

第一行:gif|jpg|png|swf|flv
表示对gif、jpg、png、swf、flv后缀的文件实行防盗链
第二行: 表示对www.ingnix.com这2个来路进行判断
if{}里面内容的意思是,如果来路不是指定来路就跳转到http://www.111cn.net页面,当然直接返回404也是可以的。

Nginx的防盗链还是比较好做的,备份一下吧。主要针对图片防盗链,因为我一般不在服务器上直接提供文件下载。

1、如果对全站图片做防盗链,至少需要一个另外的域名存放指向图片。因为如果对全站图片做了防盗链,包括盗链提示图片在内的所有图片都不可能显示。

此类情况修改 /usr/local/nginx/conf/nginx.conf 文件

2、对单独域名配置图片防盗链,个人比较推荐,一是便于控制,二是可以重新创建一个域名在同服务器上用来存放盗链提示图片。

此类情况修改 /usr/local/nginx/conf/vhost/你自己域名.conf 文件

3、你需要准备一张盗链提示图片,放在其它的服务器或者其它域名下,例如下面这个。我自己做的哈哈哈,双语显示是不是很装逼

4、在配置文件里找到类似下面location...jpg...这样的代码,然后照着改吧,我慢慢解释

 代码如下 复制代码

location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
access_log off;
valid_referers none blocked *.slyar.com *.jetfond.com *.youdao.com *.zhuaxia.com *.xianguo.com *.google.cn *.google.com *.google.com.tw *.google.com.sg *.google.com.hk *.bloglines.com image.soso.com bing.com cn.bing.com image.baidu.com *.feedburner.com *.feedsky.com;
if ($invalid_referer)
{
rewrite ^/ http://你的域名/slyar_hotlinking.png;
}
}

expires 30d; //客户端缓存时间,无关盗链

access_log off; //不记录图片访问日志,无关盗链

valid_referers none blocked... //允许访问图片的站点,blocked支持前缀通配符。none需要解释一下,如果你不知道HTTP Refer是什么,那就不知道好了,如果你知道,那这个none就表示匹配没有Refer的访问,通俗点说就是直接用URL访问的,这里我写着表示允许,如果你连直接输入图片地址都不允许看到图片的话,可以删掉这个参数

 代码如下 复制代码
rewrite ^/ http://你的域名/slyar_hotlinking.png;

 //盗链请求跳转到某个图片或者某个页面,随便

5、:wq保存退出

6、重新加载Nginx配置文件,done

 代码如下 复制代码

/etc/init.d/nginx reload

NginxHttpAccessKeyModule实现防盗链

需要先安装nginx的NginxHttpAccessKeyModule模块。其运行方式是:如我的nginx目录下有一个file.gz 的文件。对应的URI 是http://你的域名/nginx/file.gz
若用ngx_http_accesskey_module 后则根据用户的IP生成一个key值,如下的链接来访问http://你的域名/download/file.zip?key=23497sdf897. 只有给定的key值正确了,才能够下载nginx目录下的file.gz,这样就可以避免被盗链了。

时间: 2024-11-10 10:23:10

Nginx防盗链配置具体方法详解的相关文章

thinkPHP中钩子的两种配置调用方法详解_php实例

本文实例讲述了thinkPHP中钩子的两种配置调用方法.分享给大家供大家参考,具体如下: thinkphp的钩子行为类是一个比较难以理解的问题,网上有很多写thinkphp钩子类的文章,我也是根据网上的文章来设置thinkphp的钩子行为的,但根据这些网上的文章,我在设置的过程中,尝试了十几次都没有成功,不过,我还是没有放弃,最后还是在一边调节细节,一边试验的过程中实现了钩子行为的设置.下面是我个人的设置经验,在这里跟大家分享一下. 个人做了两种设置,都试验成功了,一个简单点,在thinkphp

thinkPHP中钩子的两种配置调用方法详解

本文实例讲述了thinkPHP中钩子的两种配置调用方法.分享给大家供大家参考,具体如下: thinkphp的钩子行为类是一个比较难以理解的问题,网上有很多写thinkphp钩子类的文章,我也是根据网上的文章来设置thinkphp的钩子行为的,但根据这些网上的文章,我在设置的过程中,尝试了十几次都没有成功,不过,我还是没有放弃,最后还是在一边调节细节,一边试验的过程中实现了钩子行为的设置.下面是我个人的设置经验,在这里跟大家分享一下. 个人做了两种设置,都试验成功了,一个简单点,在thinkphp

Nginx设置$_SERVER变量的方法详解

在有的PHP中定义ENVIRONMENT常量,可以区分开发环境和生产环境,如: define('ENVIRONMENT', isset($_SERVER['CI_ENV']) ? $_SERVER['CI_ENV'] : 'development'); switch (ENVIRONMENT) {  case 'development':   error_reporting(-1);   ini_set('display_errors', 1);  break;    case 'testing

解决在Web.config或App.config中添加自定义配置的方法详解_实用技巧

.Net中的System.Configuration命名空间为我们在web.config或者app.config中自定义配置提供了完美的支持.最近看到一些项目中还在自定义xml文件做程序的配置,所以忍不住写一篇用系统自定义配置的随笔了.如果你已经对自定义配置了如指掌,请忽略这篇文章.言归正传,我们先来看一个最简单的自定义配置 复制代码 代码如下: <?xml version="1.0" encoding="utf-8" ?> <configura

window/linux下php配置mysql方法详解

window系统配置mysql 无法连接mysql,写了一个测试mysql的php文件如下:  代码如下 复制代码 <?php$link=mysql_connect('localhost','root','root'); if(!$link) echo "失败!"; else echo "成功!";mysql_close(); ?>      结果报错误:Fatal error: Call to undefined function mysql_conn

Linode XEN虚拟vps安装配置Ghost方法详解

我的 vps 情况: 操作系统 – CentOS 7 64 位 web 服务器软件 – Apache Ghost1 基于 Node.js,它本身自带 web 服务器,不需要 Apache. 安装 Ghost 主要参照 Ghost 官方帮助2.下载 Ghost$ curl -L https://ghost.org/zip/ghost-latest.zip -o ghost.zip解压 Ghost$ unzip -uo ghost.zip -d ghost安装 Ghost$ cd ghost $ n

mongodb创建数据库和配置用户方法详解

1.安装mongodb 这步就不说了,大家自己去看linux/47932.htm">Centos安装MongoDB. 2.创建数据库 use tt 这样就创建了一个数据库,如果什么都不操作离开的话,这个库就会被系统删除.所以我们还要执行下面的命令: db.usr.insert({'name':'tompig'}); db.usr.insert({'name':'tompig1','id':1}); 我是随便整了2个表,这个无所谓的,反正要导入表的话就删除掉这2个就可以了,目前我们只是想让数

mac中配置memcached方法详解

用homebrew安装的话,是很简单的,不过由于自己不懂,走了很多弯路... 简单点说 1. 先安装memcached服务,用 brew install memcached 安装 2. 安装memcached 的php扩展, 用 brew install php54-memcached (ps:如果你的php版本是5.3.x 那么就是brew install php53-memcached)   安装完后,记得要启动memcached服务,就和nginx那样,不启动的话,你在php使用是没办法连

MySQL双Master配置的方法详解_Mysql

刚刚抽空做了一下MYSQL 的主主同步.把步骤写下来,至于会出现的什么问题,以后随时更新.这里我同步的数据库是TEST1.环境描述.主机:192.168.0.231(A)主机:192.168.0.232(B)MYSQL 版本为5.1.212.授权用户.A:mysql> grant replication slave,file on *.* to 'repl1'@'192.168.0.232' identified by '123456';Query OK, 0 rows affected (0.