1

因此,我在 node.js 中编写了一个 Web 应用程序,用户可以在其中上传照片,并且他们可以在每张照片上指定一些访问控制设置(公共、私人、仅限朋友)。

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

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

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

除了将它们全部公开之外,是否有更好的方法来控制访问,同时保留类似静态的性能?

编辑:实际上,文件将托管在 S3 上,而不是文件系统中。所以 node 将不再充当静态文件服务器,而更多地充当 http 代理,我怀疑它会做得更好。

4

1 回答 1

0

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

您还可以在签名的 URL 上设置过期时间,这样它就不会永远存在。

所以流程看起来像这样:

  1. 处理传入请求
  2. 在数据库中查找身份验证
  3. 对 S3 进行 API 调用以生成签名 URL
  4. 将用户重定向到 S3 签名 URL

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

于 2013-06-11T18:30:18.917 回答