所以,我正在node.js中编写一个Web应用程序,用户可以在其中上传照片,并且可以在每张照片上指定一些访问控制设置(公共,私人,仅限朋友)。
然后,我会检查每个请求的用户会话密钥,以确保他们有权访问。如果他们这样做,我通过使用fs打开文件并将其传递给响应对象来发送文件。
然而,当我用apachebench对此进行基准测试时,我每秒会得到大约1500个请求。如果我删除所有数据库的东西,它不会更快。相比之下,Nginx在同一张照片上每秒提供17000个请求。
显然,如果我的服务起飞,这种数量级的差异将是一个巨大的成本问题。
除了让它们全部公开之外,还有更好的方法来控制访问,同时保留类似静态的性能吗?
编辑:实际上,该文件将在S3上托管,而不是在文件系统中托管。因此,节点作为静态文件服务器的作用会更少,而作为一个http代理则更多,我怀疑它会更好。
答案 0 :(得分:0)
使用S3 signed URL。签名URL是私有文件的临时URL,您可以将其发送给引用S3对象的单个用户。
您还可以在已签名的网址上设置到期时间,以便它不会永远存在。
所以流程看起来像这样:
以下是相关的博文:Amazon S3 Signed URLs with NodeJS。