V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
zzlettle
V2EX  ›  Linux

防盗链 NGINX 设置,结果本地主机网站的图片一起也不显示了

  •  
  •   zzlettle · 2014-08-13 00:04:31 +08:00 · 6113 次点击
    这是一个创建于 3789 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我用nginx设置的防盗链,命令也是看的其他地方的教程,感觉很简单。
    location ~.*\.(gif|jpg|png)$ {
    valid_referers none blocked www.mywebsite.com mywebsite.com ;
    }
    设置好了以后,确实不盗链了,但我直接打开域名,我网站里面的背景图片什么的也不显示了。然后我直接把里面的删除,就留下一个空的{}
    location ~.*\.(gif|jpg|png)$ {

    }
    这样应该没有针对图片有任何限制,结果我打开网站没有任何变化,仍然是不显示背景图片,感觉好像valid_referers 就没起到任何作用样。我看LOG,显示的是对应的图片文件png jpg是404错误,但其他的比如CSS JS什么的都能正常打开。不知道我这里到底哪里错了。
    17 条回复    2020-03-12 17:56:50 +08:00
    cchange
        1
    cchange  
       2014-08-13 00:27:12 +08:00
    友情帮顶

    如果是刚改好 别忘了按Ctrl+F5刷新,可以强制从服务器上重新下载内容
    zzlettle
        2
    zzlettle  
    OP
       2014-08-13 00:30:55 +08:00
    应该不是浏览器的问题,是没有接到到文件,NGINX哪里设置的问题,因为我看到LOG里面对于图片都是访问不到的错误记录。
    niseter
        3
    niseter  
       2014-08-13 00:35:11 +08:00   ❤️ 1
    我的亲哪。。

    location ~.*\.(gif|jpg|png)$ {
    valid_referers none blocked www.mywebsite.com mywebsite.com ;
    }

    你这样Nginx哪里找源文件啊亲,

    你原来location / 下面的(或者你没有用location,直接root [file location]的)

    是root [file location]的话,还是要再写一遍
    是proxy_pass [url] 的话,也还是要再写一遍
    jackton
        4
    jackton  
       2014-08-13 01:02:20 +08:00
    来看看,肯定配置文件有问题啦
    faceair
        5
    faceair  
       2014-08-13 01:03:30 +08:00 via Android
    重启nginx了么
    zzlettle
        6
    zzlettle  
    OP
       2014-08-13 01:08:34 +08:00
    @niseter 我刚才修改为这样的,我用的是root
    location ~.*\.gif|jpg|png)$ {
    valid_referers none blocked www.mywebsite.com mywebsite.com ;
    root /myproject/app:
    }
    这样是能把所有的图片都显示出来了,但没有防盗链。图片依然能在其他的页面被连接显示出来。感觉好像valid_referers就根本没有在判断referer
    zzlettle
        7
    zzlettle  
    OP
       2014-08-13 01:09:09 +08:00
    @faceair 每次修改后,肯定重启啦
    zzlettle
        8
    zzlettle  
    OP
       2014-08-13 01:17:31 +08:00
    我其实没有修改什么配置,就是添加了3个location ,"/","/static/","media/",然后再加上这个处理图片防盗链的,排列顺序是先是 /static/ ,/media/ ,防盗链的,"/"
    我也试过,直接在图片目录下面用valid_referers none blocked www.mywebsite.com mywebsite.com ;,但根本没有变化,我感觉这句防盗链的命令没有做出访问的判断。我用的是最新的版本1.7.4nginx
    aru
        9
    aru  
       2014-08-13 10:05:54 +08:00
    还缺了配置

    if ($invalid_referer) {
    return 403;
    }
    niseter
        10
    niseter  
       2014-08-13 10:35:15 +08:00
    @niseter 请参照@aru的做法。
    vaild_referer只是标记了谁是合法的referer来源,并不能对非法的来源怎么样。
    ryd994
        11
    ryd994  
       2014-08-13 16:25:21 +08:00
    root 应该写在server段里啊,没有特殊需要的话
    zzlettle
        12
    zzlettle  
    OP
       2014-08-13 23:25:51 +08:00
    @ryd994 正解。我找到问题了,就是应该把root写在 最开始server里面,希望跟我一样的人,有同样的问题的时候能看到这贴吧。
    anyforever
        13
    anyforever  
       2014-08-14 12:44:58 +08:00   ❤️ 1
    不知道你怎么写的配置。请参考: http://ipple.net/lanmp/nginx-set-image-blocked.html
    zzlettle
        14
    zzlettle  
    OP
       2014-08-16 13:03:12 +08:00
    @anyforever 谢谢,我已经知道原因了。因为我在配置的server最开始里面没有写root,我只在防盗链的那个{}写了规则,所以出问题了,应该在server最开始就应该写清楚这个域名的root,这样后面写防盗链的规则就不会出问题了。
    ryd994
        15
    ryd994  
       2014-08-17 01:48:12 +08:00
    @zzlettle 你应该再多看点英文的官方文档,比如: http://wiki.nginx.org/Pitfalls
    ryd994
        16
    ryd994  
       2014-08-17 01:49:24 +08:00
    @zzlettle 基本逻辑是,尽量在外层写,你可以查阅官方文档,知道某个命令可以使用的区块。
    tyx1703
        17
    tyx1703  
       2020-03-12 17:56:50 +08:00
    @niseter 时隔 2038 天,掉在了同样的坑里。感谢!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2712 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 12:12 · PVG 20:12 · LAX 04:12 · JFK 07:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.