配置文件增加
1 2 3 4 5 6 7 8 |
location ~* \.(gif|jpg|png|jpeg)$ { expires 30d; valid_referers server_names *.xxx.com *.baidu.com *.google.com; if ($invalid_referer){ rewrite ^/ http://xxx/nolink.png; #return 404; } } |
以上配置注意空格
可以看到
1 2 |
<span class="hljs-attribute">location</span> <span class="hljs-regexp">~* \.(jpg|png|gif)$</span> |
此行配置的作用是匹配以 jpg/png/gif 结尾的文件请求, 如果匹配就执行 括号内的代码。
1 2 3 4 5 |
<span class="hljs-attribute">valid_referers</span> <span class="hljs-literal">none</span> server_names <span class="hljs-regexp">*.test</span>1.com ~\.test2\.; <span class="hljs-attribute">if</span> (<span class="hljs-variable">$invalid_referer</span>){ <span class="hljs-attribute">rewrite</span><span class="hljs-regexp"> ^/</span> http://xxx/nolink.png; } |
首先看第一行,这行的作用是配置可以识别 refer,即可以正常获取资源文件的请求,在这里配置加入白名单的请求 refer 域名。
参数说明:
- none?代表请求的 refer 为空,也就是直接访问,比如在浏览器中直接访问图片?
www.xxx.com/test1.png
,直接访问时,refer 会为空。 - blocked?refer 来源不为空,但是里面的值被代理或者防火墙删除了
- server_names?refer 来源包含当前的?
server_names
?即?location
?的父节点?server
?节点的?server_name
?的值。 - 字符串?定义服务器名称,比如?
*.test1.com
,配置后,来源是从?test1.com
?就会被认为是合法的请求。 - 正则表达式?匹配合法请求来源, 如?
~\.test2\.
当请求的?refer
?是合法的,即可以被后面任一参数所匹配,?$invalid_referer
?的值为0, 若不匹配则值为 1, 进入?if
?的代码中。我这里的设置是,如果是不合法的请求,就统一返回一张图片,也可以直接返回?403
。