node.js - 使用 Node.js 控制对静态内容的访问

标签 node.js nginx

因此,我正在用 Node.js 编写一个 Web 应用程序,用户可以在其中上传照片,并且可以在每张照片上指定一些访问控制设置(公开、私有(private)、仅限好友)。

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

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

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

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

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

最佳答案

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

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

因此流程将如下所示:

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

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

关于node.js - 使用 Node.js 控制对静态内容的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17050548/

相关文章:

regex - 匹配某物而不匹配某物的正则表达式

javascript - NodeJS res.on() 未触发。 res.on() 不是函数

javascript - 执行递归函数并保存回调

node.js - CentOS 7 上全局 npm 安装的理想目录

node.js - 无服务器 Node TypeScript 应用程序无法导入模块

php - Magento 网站不工作(超时)管理页面正在工作

django - 已经创建了一个安装 nginx、python、uwsgi 和 django 的 docker。如何在 VM 中测试它?

node.js - 如何使用 knexjs 批量更新

node.js - 如何将来自容器的所有流量路由到同一个 Kubernetes pod 中的另一个容器?

nginx - 仅将 docker swarm 模式端口发布到 localhost