range

If there were you, the world would be just right

需求
网站可正常请求静态文件,拒绝单独把静态文件路径取出来浏览器访问

突破口
其实可以发现2者还是存在着明显的差异-来源地址(网站访问是会带上源地址,而直接请求源地址为空)
1.png

2.png

实现思路
ngx_http_referer_module模块可根据header中的referer信息屏蔽某些请求对网站或应用的访问,可以起到禁止直接访问网站static files的作用(防盗链或保护文件)。
虽然伪造一个referer并不难,但还是提高了技术门槛,可以限制多数普通用户。

配置示例

valid_referers none blocked server_names  
               *.example.com example.* www.example.org/galleries/  
               ~\.google\.;  
  
if ($invalid_referer) {  
    return 403;  
} 
  • valid_referers 代表可信referer,此处可信referer的设置将会使变量$invalid_referer的值为「0」,反之$invalid_referer的值为「1」,则执行IF条件名并返回相关限制结果。
  • none是指当referer为空的时候,比如在链接器中直接打开一个图片链接,若要禁止用户直接访问,则必须省掉none。
  • blocked 是指经过某些代理或firewall过滤后的referer,比如省略了url前缀等, 同样地,若要禁止用户直接访问,则必须省掉blocked。
  • server_names 是nginx配置文件中的server name项,代指网站域名 

需求实例:禁止直接访问

#禁止所有用户,直接访问网站上的静态资源并返回错误代码404
location ~* ^.*\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {
    valid_referers server_names;
    if ($invalid_referer) {
        return 404;
    }
}

反向代理:指本服务器接收到请求,然后将请求转发到其他服务器或者端口,并结果返回。
nginx配置中追加:

location / {
    proxy_pass http://test; # 请求需要转发的服务器或者端口
}

就这么简单。
end!!