linux's docs

22.5.1: 访问控制-防盗链无效


1. curl -e参数(指定refer地址),可用来测试防盗链

1) nginx的www.301r.com虚拟域名的配置文件

location ~* ^.+\.(gif|jpe?g|png|bmp|swf|rar|zip|flv|xls|bz2|gz|doc)$
        {
                valid_referers none blocked server_names .\*301r.com;
                if ($invalid_referer)
                {
                        return 403;
                }
        }

2) 错误信息

上面的配置在官网对比过,语法没有错误,但是用curl -e指定一些乱七八糟的refer来访问论坛png图片时,居然全部可以正常"200 ok".

百思不得其解后,才发现我在防盗链的配置前面,配置过png图片的缓存和不记录log

3) 错误排除

尝试把防盗链的配置剪切到图片缓存和关闭log的前面时,成功解决

curl -I -xlocalhost:80 -e "http://www.302r.com/fdsfds" "http://www.301r.com/static/image/common/logo.png"
HTTP/1.1 403 Forbidden
Server: nginx/1.6.2
Date: Sun, 25 Jan 2015 02:04:55 GMT
Content-Type: text/html
Content-Length: 168
Connection: keep-alive

4) 原因分析:

其实之前曾经就遇到过这个问题,当时也是在vhost的配置文件中先写了php解析,然后又对某个php文件进行auth认证,就是用调换顺序把auth认证写在了php解析的前面才成功了的,所以,nginx和apache配置文件的逻辑,应该与iptables类似,只要满足前面的规则就可以执行了。

Contents