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

2014-08-13 00:04:31 +08:00
 zzlettle
我用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什么的都能正常打开。不知道我这里到底哪里错了。
6083 次点击
所在节点    Linux
17 条回复
cchange
2014-08-13 00:27:12 +08:00
友情帮顶

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

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
2014-08-13 01:02:20 +08:00
来看看,肯定配置文件有问题啦
faceair
2014-08-13 01:03:30 +08:00
重启nginx了么
zzlettle
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
2014-08-13 01:09:09 +08:00
@faceair 每次修改后,肯定重启啦
zzlettle
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
2014-08-13 10:05:54 +08:00
还缺了配置

if ($invalid_referer) {
return 403;
}
niseter
2014-08-13 10:35:15 +08:00
@niseter 请参照@aru的做法。
vaild_referer只是标记了谁是合法的referer来源,并不能对非法的来源怎么样。
ryd994
2014-08-13 16:25:21 +08:00
root 应该写在server段里啊,没有特殊需要的话
zzlettle
2014-08-13 23:25:51 +08:00
@ryd994 正解。我找到问题了,就是应该把root写在 最开始server里面,希望跟我一样的人,有同样的问题的时候能看到这贴吧。
anyforever
2014-08-14 12:44:58 +08:00
不知道你怎么写的配置。请参考: http://ipple.net/lanmp/nginx-set-image-blocked.html
zzlettle
2014-08-16 13:03:12 +08:00
@anyforever 谢谢,我已经知道原因了。因为我在配置的server最开始里面没有写root,我只在防盗链的那个{}写了规则,所以出问题了,应该在server最开始就应该写清楚这个域名的root,这样后面写防盗链的规则就不会出问题了。
ryd994
2014-08-17 01:48:12 +08:00
@zzlettle 你应该再多看点英文的官方文档,比如: http://wiki.nginx.org/Pitfalls
ryd994
2014-08-17 01:49:24 +08:00
@zzlettle 基本逻辑是,尽量在外层写,你可以查阅官方文档,知道某个命令可以使用的区块。
tyx1703
2020-03-12 17:56:50 +08:00
@niseter 时隔 2038 天,掉在了同样的坑里。感谢!

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/127531

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX