因此,我正在用 Node.js 编写一个 Web 应用程序,用户可以在其中上传照片,并且可以在每张照片上指定一些访问控制设置(公开、私有(private)、仅限好友)。
然后,我在每个请求上检查用户的 session key ,以确保他们具有访问权限。如果他们这样做,我会通过使用 fs 打开文件并将其通过管道传输到响应对象来向他们发送文件。
但是,当我使用 apachebench 进行基准测试时,我每秒收到大约 1500 个请求。如果我删除所有数据库内容,它并不会变得更快。相比之下,Nginx 每秒对同一张照片处理 17000 个请求。
显然,如果我的服务起飞,这种数量级的差异将成为一个巨大的成本问题。
除了将它们全部公开之外,是否有更好的方法来控制访问,同时保持类似静态的性能?
编辑:实际上,该文件将托管在 S3 上,而不是文件系统中。因此,node 将不再充当静态文件服务器,而更多地充当 http 代理,我怀疑它会更好。
最佳答案
使用 S3 signed URL 。签名 URL 是私有(private)文件的临时 URL,您可以将其发送给引用 S3 对象的单个用户。
您还可以在签名 URL 上设置过期时间,这样它就不会永远保留。
因此流程将如下所示:
- 处理传入请求
- 在数据库中查找身份验证
- 对 S3 进行 API 调用以生成签名 URL
- 将用户重定向到 S3 签名的网址
这是相关的博客文章:Amazon S3 Signed URLs with NodeJS .
关于node.js - 使用 Node.js 控制对静态内容的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17050548/