说到访问权限控制,很多看了nginx相关文章的朋友都会自然联想到X-Accel-Redirect这个头。这个头有个缺陷,就是所有的访问都会先经过一个fastcgi来判断权限。在下载系统上,用这个方法是非常合适的,但是在访问量非常大的图片服务器,单单用这个方法会使大量无需权限判定的图片也经过一个fastcgi处理,多此一举并且无端耗费大量的资源。虽然X-Accel-Redirect是一个新的方案,但是并不代表它能很好的解决所有问题,同时也不妨碍继续思考解决问题的其它办法。

图片服务器加上权限判断主要用于博客和相册这样的系统。在网上稍微观察,可以看到目前大部分的博客相册等系统并没有针对图片本身加入权限判断,而仅仅是将网页部分的权限控制住。这样的话很多网友将其图片加锁,实际上此图片在外部仍有办法打开。我估计此原因有其一是实现起来有性能问题,其二是诸多网站将图片放置到CDN上,而CDN并没有对此有相应的方案的缘故。走了一圈发现只有QQ空间在用带权限的图片,而它看上去是直接用fastcgi实现的,性能居然还不错,佩服一下。

下文单纯解决性能问题,其思路是在访问图片附近放置一个控制文件,通过nginx判断决定是否要到fastcgi认证,其原理类似apache的.htaccess。有用到CDN的,因为CDN多数是squid,要加入清理squid缓存的机制。

1、针对单一图片的控制

如果图片按照哈希结构放置,那么用户的图片加锁后要把每一张图片都加上控制文件,如果该用户图片较多,写入时稍嫌多些。

比如有一张图:

/data/image/a/z/asdfqerqwegasd.jpg

写上一个空文件:

/data/image/a/z/asdfqerqwegasd.jpg.lock

然后在nginx配置判断:

location / {
root /data/image/;
if ( -f “${request_filename}.lock” )
{
#rewrite ^(.*)$ http://www.sudone.com/access.jsp?url=$1 last;
return 403;#test
}
}

这样,只要在图片旁边有一个.lock文件,就会访问到403 Forbidden;使用rewrite会将图片链接和cookie定位到后端,由后端返回判定结果X-Accel-Redirect头或者重定向到另外一个jsp去填密码。

2、针对目录的控制

如果图片是按照目录放置,那么配置会稍微复杂一些。

location / {
root /data/image/;
if ( $request_filename ~ ^(.*)/[^/]*$ ){
set $dir $1;
}
if ( -f “${dir}/lock” )
{
#rewrite ^(.*)$ http://www.sudone.com/access.jsp?url=$1 last;
return 403;#test
}
}

首先用正则表达式取出图片路径的目录,然后带上控制文件名判断此文件是否存在,这样只要在图片的目录中放置一个名叫lock的空文件就能控制完整个目录:

/data/image/a/z/lock

测试一下,效果不错,只要控制文件存在,访问立刻403;删去控制文件,访问正常

原文链接:https://blog.csdn.net/zhclmin/article/details/6622314

使用nginx作图片服务器的访问权限控制相关推荐

  1. nginx 配置图片服务器 文件大小,nginx 配置图片服务器 文件大小

    nginx 配置图片服务器 文件大小 内容精选 换一换 该任务指导用户使用Loader将数据从SFTP服务器导入到HDFS/OBS.创建或获取该任务中创建Loader作业的业务用户和密码.确保用户已授 ...

  2. Nginx,Nginx 搭建图片服务器

    Nginx Nginx 概述 反向代理 工作流程 优点 1:保护了真实的web服务器,保证了web服务器的资源安全 2:节约了有限的IP地址资源 3:减少WEB服务器压力,提高响应速度 4:其他优点 ...

  3. 使用 Nginx 搭建图片服务器

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者 | ITDragon龙 链接 | cnblogs.com/i ...

  4. Nginx独立图片服务器搭建教程

    Nginx独立图片服务器搭建教程 发布时间:2014-06-04编辑:脚本学堂 本文介绍了nginx独立图片服务器的搭建与配置教程,有需要的朋友参考下. 首先,为什么需要独立图片服务器? 现在主流的网 ...

  5. Nginx 搭建图片服务器

    本章内容通过Nginx 和 FTP 搭建图片服务器.在学习本章内容前,请确保您的Linux 系统已经安装了Nginx和Vsftpd. Nginx 安装 http://www.cnblogs.com/i ...

  6. win7下搭建Nginx简单图片服务器

    Nginx搭建图片服务器 Nginx下载地址:http://nginx.org/en/download.html 本例下载的是window版本nginx-1.11.8 以下是我本机操作说明: 一.安装 ...

  7. 有账号密码的ftp服务器如何访问权限,局域网ftp服务器怎么访问权限

    在计算机网络发展的短短几十年的时间里,信息共享一直伴随着我们,那么你知道局域网ftp服务器怎么访问权限吗?下面是学习啦小编整理的一些关于局域网ftp服务器怎么访问权限的相关资料,供你参考. 局域网ft ...

  8. Java访问权限控制

    面向对象的核心思想之一就是封装,只把有限的方法和成员公开给别人,这也是迪米特法则的内在要求,是外部调用方对方法体内的实现细节知道得尽可能少. 如何实现封装呢? 需要使用某些关键字来限制外部对类内属性和 ...

  9. C++知识点11——this指针,const成员函数,访问权限控制

    1.this指针 每个类都有this指针,this指针指向this指针指向的是类的对象本身 class A { public:A() {}~A() {}void func() {cout<< ...

最新文章

  1. 如何避免APK文件的反向工程?
  2. 《转》从程序员到项目经理(五):不是人人都懂的学习要点
  3. python3.7.2使用-centos7系统下python2与python3共存
  4. 数值分析之数值稳定性篇
  5. Fabonacci三种方法求解C++
  6. java调用matlab 数组_JAVA调用matlab程序 输入输出数据转换
  7. 使用js如何获取treeview控件的当前选中的节点
  8. Nginx深入详解之模块化体系结构
  9. SAP Kyma能像SAP BYD那样做field extension吗
  10. vue源码学习--vue源码学习入门
  11. Win7旗舰版电脑开机慢的解决方法
  12. 其实,我只想安静的写写代码...
  13. 一位算法工程师从30+场秋招面试中总结出的超强面经—文本检测与GAN篇(含答案)...
  14. Daemon Process
  15. 把router-link标签渲染成指定的标签
  16. C#接口编程实例解析[转]
  17. 用html和CSS做个人简历
  18. jolog扫地机器人怎么样_扫地机器人怎么样?
  19. swift-集成touch id功能 指纹验证
  20. iOS自定义UITableViewRowAction

热门文章

  1. WCF学习(2)- 契约
  2. 三菱PLC CCD控制ST程序 本PLC程序中CCD控制用的ST结构化语言,程序都有注释
  3. C/C++实现水果忍者(四) 实现按鼠标左键划过水果消失的功能
  4. 联网获取360数据,识别骚扰电话,java实现
  5. 当 IDENTITY_INSERT 设置为 OFF 时,不能为表 'WLog' 中的标识列插入显式值。
  6. 使用原生JS+Canvas实现五子棋游戏
  7. c语言程序设计工作任务,C语言程序设计任务驱动教程
  8. java实现Stripe信用卡支付
  9. 什么软件能识别树木花草?亲测好用的软件分享
  10. 医疗项目 01(项目简介)