应用场景:图片等资源须要设置权限,如:仅仅有认证过的用户才干訪问自己的图片。

解决的方法:使用Nginx的防盗链模块http_secure_link能够实现,该模块默认情况下不包括。故在安装时要加上--with-http_secure_link_module

该模块依据两个參数控制权限訪问,一个是过期时间(即该链接在这个时间之前可訪问,过期后无法訪问),该參数主要出于安全考虑。

还有一个是通过md5算法算出来的KEY,一般通过uri计算

举例:

    server {
listen 80;
server_name 192.168.1.22; root /home/search/upload/portal_upload/user;
location / {
index index.html index.htm;
} location /img/dossier/ {
secure_link $arg_st,$arg_e;
secure_link_md5 guahao@345$uri$arg_e; if ($secure_link = "") {
return 403;
}
if ($secure_link = "0") {
return 403;
} rewrite ^/img/dossier/(.*)$ /img/dossier/$1 break;
}
}

上面的secure_link定义了控制权限的两个參数(各自是st, e)

当中e就是上述的过期时间,建议e = 当前时间 + 有效期限(5分钟)

比如:

e = date +%s -d "December 22, 2014 12:22:03"

   = 1419222123

st的计算公式例如以下:md5(PKEY,uri,e)。当中PKEY是自己定义的常量

比如:

st = php -r 'print str_replace("=", "",strtr(base64_encode(md5("guahao@345/img/dossier/16/641fd565-ec87-4cbe-b4ae-7eedba41bb0e.jpg1419222123",TRUE)),"+/","-_")) . "\n";'

=13c9kZrZT1qnNgpG4Vtksw

效果例如以下:

http://192.168.1.22/img/dossier/16/641fd565-ec87-4cbe-b4ae-7eedba41bb0e.jpg  --不可訪问

http://192.168.1.22/img/dossier/16/641fd565-ec87-4cbe-b4ae-7eedba41bb0e.jpg?st=13c9kZrZT1qnNgpG4Vtksw&e=1419222123  --过期前可訪问,过期后不可訪问

http://192.168.1.22/img/headpic/13/13_140x140.jpg   --不在dossier以下的图片没有訪问限制

OK,到此为此我们基本实现的基于应用的权限控制,且方法灵活。由于e和st的生成由应用程序来控制。能进行随意的改动和变动,而架构不受影响。

[Nginx]用Nginx实现与应用结合的訪问控制 - 防盗链的更多相关文章

  1. centos+nginx+php-fpm+php include fastcgi_params php页面能訪问但空白,被fastcgi_params与fastcgi.conf害慘了

    今天在centos上折腾这块是发现老是訪问页面时,浏览器中提示是200 ok.且訪问html后缀却是正常出现内容. 可是訪问php后缀却返回空白页面,同一时候查看全部的log没有发现不论什么出错信息; ...

  2. 配置Nginx防止直接用IP訪问Webserver

    看了非常多Nginx的配置,好像都忽略了ip直接訪问Web的问题.这样理论上不利于SEO优化,所以我们希望能够避免直接用IP訪问站点.而是域名訪问.详细怎么做呢.看以下. 官方文档中提供的方法: If ...

  3. Nginx配置文件nginx.conf中文详解(转)

    ######Nginx配置文件nginx.conf中文详解##### #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_ ...

  4. 苹果下如果安装nginx,给nginx安装markdown第三方插件

    用brew install nginx 这样安装的是最新版的nginx, 但是在有些情况下,安装第三方插件需要特定的版本,更高一级的版本可能装不上. 它的原理是下载安装包进行自动安装,建立软链,这样就 ...

  5. nginx secure_link下载防盗链

    下载服务器上有众多的软件资源, 可是很多来源不是本站,是迅雷.flashget, 源源不断的带宽,防盗链绝对是当务之急. 使用来源判断根本不靠谱,只能防止一些小白站点的盗链,迅雷之类的下载工具完全无效 ...

  6. Nginx中防盗链(下载防盗链和图片防盗链)操作记录

    日常运维工作中,设置防盗链的需求会经常碰到,这也是优化网站的一个必要措施.今天在此介绍Nginx中设置下载防盗链和图片防盗链的操作~ 一.Nginx中下载防盗链的操作记录对于一些站点上的下载操作,有很 ...

  7. Nginx research, nginx module development

    catalog . 初探nginx架构 . handler模块 . Nginx编译.安装.配置 . Hello World模块开发 1. 初探nginx架构 nginx在启动后,在unix系统中会以d ...

  8. nginx配置图片防盗链

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${ expires 30d; access_log off; valid_referers none blocked ...

  9. 通过Nginx和Nginx Plus阻止DDoS攻击

    分布式拒绝服务攻击(DDoS)指的是通过多台机器向一个服务或者网站发送大量看似合法的数据包使其网络阻塞.资源耗尽从而不能为正常用户提供正常服务的攻击手段.随着互联网带宽的增加和相关工具的不断发布,这种 ...

随机推荐

  1. 获取客户端网卡MAC地址和IP地址实现JS代码

    获取客户端网卡MAC地址和IP地址实现JS代码 作者: 字体:[增加 减小] 类型:转载   获取客户端的一些信息,如IP和MAC,以结合身份验证,相信很多人都会这样做吧,我们这里用Javascrip ...

  2. PHP: Short URL Algorithm Implementation

    1.http://www.snippetit.com/2009/04/php-short-url-algorithm-implementation/ The following code is wri ...

  3. go语言之进阶篇关闭channel

    1.关闭channel package main import ( "fmt" ) func main() { ch := make(chan int) //创建一个无缓存chan ...

  4. win8 中如何删除 共享文件夹 用户名和密码

    在访问共享文件夹时我们都喜欢选中记住用户名和密码,可是有时候密码输入错误或者密码修改了,这时就需要我们删除或则修改先前记住的用户名和密码记录. 首先进入:控制面板\所有控制面板项\凭据管理器 选择wi ...

  5. libnids

    一.简介 libnids的英文意思是 Network Intrusion Detect System library,即网络入侵监测系统函数库.它是在前面介绍的两种C函数接口库libnet和libpc ...

  6. LeetCode 754. Reach a Number到达终点数字

    题目 在一根无限长的数轴上,你站在0的位置.终点在target的位置. 每次你可以选择向左或向右移动.第 n 次移动(从 1 开始),可以走 n 步. 返回到达终点需要的最小移动次数. 示例 1: 输 ...

  7. 本地时间转化成 GMT 时间

    DateTime.Now.ToUniversalTime().ToString("yyMMddHHmmss");

  8. sqrt函数的实现

    原文:http://blog.csdn.net/legend050709/article/details/39394381 sqrt算法实现: (一)int sqrt1(int n);求取整数x的平方 ...

  9. Mysql正则匹配某列是否含有手机号

    SELECT COUNT(1) FROM t_user WHERE user_name REGEXP ".[1][35678][0-9]{9}."; 解释: 正则中 .的意思是所有 ...

  10. linux 文件系统与磁盘修复

    fsck修复受损的文件系统   Linux不正常关机,有时候再次启动时会报文件系统损坏,如何修复文件? 首先会让你输入root用户的密码.  1)出错的时候如果告诉你是哪一块硬盘的分区有问题,比如是/ ...