切记: 数据要比编程逻辑更容易驾驭(The Art of Unix Programming )

Wednesday, December 16, 2009

static文件的权限控制

借用django的static一词, 表示: 非模板文件外的文件.

现实中常常会有这样的需要: 访问某一URL的行为时, 有逻辑判断, 听话起来好像是废话! 呵呵。

比如: 访问需要被进行一次权限认证之类的。  A用户访问http://xx.com/information.zip和B访问此URL的結果是不一样的。

可能会想, 既然请求到了python代码里, 有什么不能做的?python返回这个文件不就行了。嗯, 这是可以的。只是framework也去做static文件的分发了。 但是应该professional一点, 让http server去干。 ( 如果http不干, 还要http server干嘛呢? 呵呵)

然后再想, python返回一个redirect HTTP header给proxy, 想办法让proxy去取static 文件。

是这一个好的想法。 不过没有试过。 不知道proxy会不会为这个redirect请求买单。不过, modern proxy是有自己的牛X办法的。就是说:这种需求的确实实在在存在。

如下就使用nginx和django来做一下测试.

django方面:
views里最主要的一段代码:

    # 只是做测试, 不算什么URL都下载一个文件iso.img文件
    response['X-Accel-Redirect'] = '/protected/iso.img'
    return response

urls.py配置:
(r'^(?P<path>attach/.*)$', 'attachment.static.serve', {'document_root': PROJECT_PATH + '/attachment/'}, ),

nginx方面, 做个简单的配置:

    location / {
        proxy_pass http://127.0.0.1:8000/;
    }
   
    location /protected/ {
      internal;
      alias   /tmp/; # note the trailing slash
    }


OK, 一切正常~~~~framework只返回HTTP头就可以实现静态文件的处理。

相关技术:防盗链

还有一种常见的URL处理方法: 防盗链, 常见的就是在URL上加一个"变化"的参数. 如:

http://www.fuck.com/down/abc.mp3?key=123

key是会变化的, 比如按时间变化之类的, 这个方法说穿了就是产生一次性的URL.


0 comments:

Post a Comment