Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
zzlettle
V2EX  ›  Linux

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

  •  
  •   zzlettle · Aug 13, 2014 · 6680 views
    This topic created in 4315 days ago, the information mentioned may be changed or developed.
    我用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 replies    2020-03-12 17:56:50 +08:00
    cchange
        1
    cchange  
       Aug 13, 2014
    友情帮顶

    如果是刚改好 别忘了按Ctrl+F5刷新,可以强制从服务器上重新下载内容
    zzlettle
        2
    zzlettle  
    OP
       Aug 13, 2014
    应该不是浏览器的问题,是没有接到到文件,NGINX哪里设置的问题,因为我看到LOG里面对于图片都是访问不到的错误记录。
    niseter
        3
    niseter  
       Aug 13, 2014   ❤️ 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  
       Aug 13, 2014
    来看看,肯定配置文件有问题啦
    faceair
        5
    faceair  
       Aug 13, 2014 via Android
    重启nginx了么
    zzlettle
        6
    zzlettle  
    OP
       Aug 13, 2014
    @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
       Aug 13, 2014
    @faceair 每次修改后,肯定重启啦
    zzlettle
        8
    zzlettle  
    OP
       Aug 13, 2014
    我其实没有修改什么配置,就是添加了3个location ,"/","/static/","media/",然后再加上这个处理图片防盗链的,排列顺序是先是 /static/ ,/media/ ,防盗链的,"/"
    我也试过,直接在图片目录下面用valid_referers none blocked www.mywebsite.com mywebsite.com ;,但根本没有变化,我感觉这句防盗链的命令没有做出访问的判断。我用的是最新的版本1.7.4nginx
    aru
        9
    aru  
       Aug 13, 2014
    还缺了配置

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