2013-06-11 37 views
1

因此,我在node.js中编写了一个web应用程序,用户可以上传照片,并且可以在每张照片上指定一些访问控制设置(公共,私人,朋友) 。使用node.js控制对静态内容的访问

然后我检查每个请求上的用户会话密钥以确保他们有权访问。如果他们这样做,我通过使用fs打开它并将它传递给响应对象来向它们发送文件。

但是,当我使用apachebench进行基准测试时,我每秒获得约1500个请求。如果我删除所有数据库的东西,它不会更快。相比之下,Nginx在同一张照片上每秒处理17000个请求。

显然,如果我的服务起飞,这个数量级的差异将会是一个巨大的成本问题。

有没有更好的方法来控制访问,同时保持类似静态的性能,除了使它们全部公开?

编辑:实际上,文件将在S3上托管,而不是在文件系统中。因此,节点将不再是一个静态文件服务器,而更像是一个http代理,我认为它会好得多。

回答

0

使用S3 signed URL。签名的URL是专用文件的临时URL,您可以将其发送给引用S3对象的单个用户。

您也可以在签名的URL上放置过期时间,以免它永远存在。

所以流动是这样的:

  1. 处理传入的请求
  2. 查找认证数据库
  3. 发出API调用S3生成标识的URL
  4. 将用户重定向到S3签署网址

这里是相关的博客文章:Amazon S3 Signed URLs with NodeJS

+0

谢谢。我将评估这个选项与代理对s3的请求(从而避免来自重定向的延迟,我怀疑这是不可接受的)。其他选项总是欢迎! – jschall