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

使用node.js控制对静态内容的访问,node.js,nginx,Node.js,Nginx,因此,我正在node.js中编写一个web应用程序,用户可以上传照片,并且可以在每张照片上指定一些访问控制设置(仅限公共、私人和朋友) 然后,我在每个请求上检查用户的会话密钥,以确保他们具有访问权限。如果他们这样做了,我将通过使用fs打开文件并将其管道传输到响应对象来向他们发送文件 然而,当我使用apachebench对此进行基准测试时,每秒会收到大约1500个请求。如果我删除所有的数据库内容,它不会更快。相比之下,Nginx每秒为同一张照片提供17000个请求 显然,如果我的服务起飞,这个数量

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

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

然而,当我使用apachebench对此进行基准测试时,每秒会收到大约1500个请求。如果我删除所有的数据库内容,它不会更快。相比之下,Nginx每秒为同一张照片提供17000个请求

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

除了公开访问之外,还有没有更好的方法来控制访问,同时保持静态性能

编辑:实际上,文件将托管在S3上,而不是文件系统中。因此,node将更少地充当静态文件服务器,而更多地充当http代理,我认为它在这方面会做得更好。

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

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

因此,流程如下所示:

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


  • 这里有一篇相关的博文:。

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