帮助与文档

全部文档
帮助与文档 > 云服务器 > 服务器运维 > Linux > 应用类 > Nginx配置图片防盗链

Nginx配置图片防盗链

    为了防止其他站点直接从我们网站引用图片等链接,消耗了我们服务器资源和网络流量,我们一般会对图片等资源做一些限制,比如打水印,防盗链设置等,本文主要结合Nginx来讲解如何设置图片防盗链。

    我们所说的防盗链功能是都是基于 HTTP 协议支持的 Referer 机制,通过 referer 跟踪来源,对来源进行识别和判断。 利用这个策略,我们基本可以防止其他站点直接链接我们站上的图片。 举个例子,如果a.com网站的页面调用了我站的图片:https://www.helloweba.net/p.jpg ,我们通过Nginx来判断它的来源域,不属于www.niaoyun.com过来的图片都返回403,即禁止访问。

    打开对应站点的conf配置文件,有关Nginx站点配置文件可以参考: https://www.niaoyun.com/server/504.html ,主要配置代码如下:

    1. location ~*\.(gif|jpg|jpeg|png|bmp|swf)$ {
    2. valid_referers none blocked www.niaoyun.com m.niaoyun.com;
    3. if ($invalid_referer) {
    4. return 403;
    5. }
    6. }

    以上代码解释如下:

    1.location中指定要防篡改的文件类型,多个后缀用“|”符号分开。

    2.valid_referers指定资源访问是通过以下几种方式为合法,即白名单,允许文件链出的域名白名单。

    none:直接通过url访问,无referer值的情况

    blocked:referer值被防火墙修改

    servername:指定资源在合法的域名白名单中可以被引用,支持*通配符,多个域名使用空格符分开

    3.if判断如果用户请求的资源不符合上述配置,那么rewrite重定向到你想指定的url上,也可以配置403权限错误。

    以上设置差不多就可以起到防盗链作用了,但是,这样并不是彻底地实现真正意义上的防盗链!

    我们应该注意设置:

    1. location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    2. {
    3. expires 30d;
    4. valid_referers www.niaoyun.com m.niaoyun.com;
    5. if ($invalid_referer) {
    6. return 403;
    7. }
    8. }

    expires 30d;属于配置文件中location作用域中原有的图片缓存时间配置,这里我们把两个location合并在一起。

    接着,我们去掉none blocked两个关键词,目的是直接在浏览器地址栏中输入对应的图片地址也会被拒绝访问。

    如果匹配到不属于设定的referer来源域,则返回403,或者重置到一个url地址上去,这样可以避免右键另存为的方式下载图片。

    当然,话又说回来,如果人家真想获得你的图片还是有办法的,比如各种伪造referer来源等方法。

    还有一种情况,如果我们站点使用CDN,那么在nginx上的防盗链配置似乎不起作用了,别担心,找CDN厂商,他们有一整套资源防盗链方法,大多在CDN管理平台直接设置即可,比如阿里云CDN,其原理也是判断referer。

    如果在操作过程有任何疑问,欢迎在后台提交工单

    这条帮助是否解决了您的问题? 已解决 未解决

    提交成功!非常感谢您的反馈,我们会继续努力做到更好!更多建议 非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

    在文档使用中是否遇到以下问题:

    更多建议