Nginx服务器怎么来防止图片盗链-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Nginx服务器怎么来防止图片盗链 已解决

网站不想让人随随便便的盗图,我要防止图片盗链

展开
收起
我的中国 2016-02-01 16:55:19 2858 0
1 条回答
写回答
取消 提交回答
  • 我的中国
    R&S网络资深工程师 ,阿里云论坛官方版主,阿里云云计算ACP,春考教学网站长,IT技术晋级之路专辑作者
    采纳回答

    由于nginx不支持.htaccess,所以,从这个方面直接去防止是行不通的,我们要通过修改配置文件来解决。
    首先,我们找到需要防盗链的域名的conf文件,路径:/usr/local/nginx/conf/vhost/,比如xx.com.conf。先备份下原文件,然后找到下面的部分:

    location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
    {
    expires 30d;
    }
    将它修改为:

    location ~ .*.(gif|jpg|jpeg|png|bmp|swf)$
    {
    valid_referers none blocked www.xx.net xx.net;
    if ($invalid_referer) {
    rewrite ^/ http://www.xx.net/404.jpg;

    return 404;

    }
    expires 30d;
    }
    上面的内容,大家请根据个人的情况酌情修改,我这里做基本的解释:
    第一行gif|jpg|jpeg|png……这些是您需要防止盗链的文件类型,您可以补充一些后缀类型;
    第三行是你的网站的域名,就是说放行的域名,如果有多个,请添加,注意空格;
    第五行是给盗链看到的图片,返回一个404.jpg,这个图片源地址是要可以外链的哦,不然,别人看到的也就一个XX。
    完成之后保存,上传到原位置覆盖,之后重启下lnmp使之生效。
    ?
    1
    /root/lnmp restart
    referer指令简介
    nginx模块ngx_http_referer_module通常用于阻挡来源非法的域名请求.我们应该牢记,伪装Referer头部是非常简单的事情,所以这个模块只能用于阻止大部分非法请求.我们应该记住,有些合法的请求是不会带referer来源头部的,所以有时候不要拒绝来源头部(referer)为空的请求.
    语法: referer_hash_bucket_size size;
    默认值: referer_hash_bucket_size 64;
    配置段: server, location
    这个指令在nginx 1.0.5中开始出现.
    Sets the bucket size for the valid referers hash tables. The details of setting up hash tables are provided in a separate document.
    语法: referer_hash_max_size size;
    默认值: referer_hash_max_size 2048;
    配置段: server, location
    这个指令在nginx 1.0.5中开始出现.
    Sets the maximum size of the valid referers hash tables. The details of setting up hash tables are provided in a separate document.
    语法: valid_referers none | blocked | server_names | string ...;
    默认值: —
    配置段: server, location
    指定合法的来源'referer', 他决定了内置变量$invalid_referer的值,如果referer头部包含在这个合法网址里面,这个变量被设置为0,否则设置为1.记住,不区分大小写的.
    参数说明
    none
    “Referer” 来源头部为空的情况
    blocked
    “Referer”来源头部不为空,但是里面的值被代理或者防火墙删除了,这些值都不以http://或者https://开头.
    server_names
    “Referer”来源头部包含当前的server_names(当前域名)
    arbitrary string
    任意字符串,定义服务器名或者可选的URI前缀.主机名可以使用*开头或者结尾,在检测来源头部这个过程中,来源域名中的主机端口将会被忽略掉
    regular expression
    正则表达式,~表示排除https://http://开头的字符串.
    最后
    图片使用来源头部做防盗链是最合理的. 简单、实用。但是没有办法防采集。

    2019-07-17 18:27:44
    赞同 展开评论 打赏
问答排行榜
最热
最新
相关电子书
更多
《Nginx 代理系统常用手册》
立即下载
CentOS Nginx PHP JAVA 多语言镜像使用手
立即下载
CentOS Nginx PHP JAVA多语言镜像使用手册
立即下载